1 import org.jetbrains.jps.Module
2 import static org.jetbrains.jps.idea.IdeaProjectLoader.*
4 includeTargets << new File("${guessHome(this)}/build/scripts/utils.gant")
6 target('default' : "Developers update") {
7 layoutFull(home, deploy)
10 def module(String name) {
11 ant.module(name: name)
15 def module(String name, Closure init) {
16 ant.module(name: name, init)
20 private def markUsed(String name) {
21 def module = project.modules[name]
22 // Can be null in "Developers update" since we are not actually loading modules.xml
28 private List platformImplementationModules() {
42 private List<String> platformApiModules() {
43 return ["platform-api", "lvcs-api", "lang-api", "vcs-api", "usageView", "xdebugger-api", "xml-openapi"]
46 def layoutFull(String home, String targetDirectory) {
47 project.stage("layout to $targetDirectory")
49 //noinspection GroovyAssignabilityCheck
50 List<String> openapiModules = [platformApiModules(),
51 "openapi", "testFramework-java", "debugger-openapi", "compiler-openapi", "dom-openapi", "execution-openapi",
52 "jsp-openapi"/*, "jam-support-openapi",
53 "jam-support-openspi"*/].flatten()
55 //noinspection GroovyAssignabilityCheck
56 List<String> implementationModules = [platformImplementationModules(),
66 "RegExpSupport"].flatten()
68 ant.patternset(id: "resources.included") {
69 include(name: "**/*.properties")
70 include(name: "fileTemplates/**/*")
71 include(name: "inspectionDescriptions/**/*")
72 include(name: "intentionDescriptions/**/*")
73 include(name: "tips/**/*")
76 ant.patternset(id: "resources.excluded") {
77 exclude(name: "**/*.properties")
78 exclude(name: "fileTemplates/**/*")
79 exclude(name: "fileTemplates")
80 exclude(name: "inspectionDescriptions/**/*")
81 exclude(name: "inspectionDescriptions")
82 exclude(name: "intentionDescriptions/**/*")
83 exclude(name: "intentionDescriptions")
84 exclude(name: "tips/**/*")
88 layout(targetDirectory) {
90 jar("util.jar") { module("util") }
91 jar("idea-jsp-openapi.jar") { module("jsp-base-openapi") }
94 openapiModules.each { module it}
97 jar("annotations.jar") { module("annotations")}
98 jar("extensions.jar") { module("extensions")}
101 implementationModules.each { module it}
104 jar("bootstrap.jar") { module("bootstrap")}
105 jar("resources.jar") {
107 module("platform-resources")
108 module("community-resources")
111 jar("idea_rt.jar") { module("java-runtime")}
113 jar("forms_rt.jar") {
115 module("forms-compiler")
118 jar("resources_en.jar") {
119 module("resources-en")
120 module("platform-resources-en")
123 jar("icons.jar") { module("icons") }
124 jar("boot.jar") { module("boot") }
128 module("forms-compiler")
133 fileset(dir: "$home/lib") {
134 include(name: "*.jar")
135 exclude(name: "eawtstub.jar")
138 fileset(dir: "$home/lib/src") {
139 include(name: "trove4j_changes.txt")
140 include(name: "trove4j_src.jar")
144 fileset(dir: "$home/lib/ant") {
145 exclude(name: "**/src/**")
151 def simplePlugins = ["commander", "copyright", "properties", "java-i18n"]
157 layoutPlugin("ant", "ant", "antIntegration")
158 layoutPlugin("InspectionGadgets", "InspectionGadgetsPlugin")
159 layoutPlugin("IntelliLang", "IntelliLangJava")
160 layoutPlugin("IntentionPowerPack", "IntentionPowerPackPlugin")
161 layoutPlugin("ToString", "generate-tostring", "toString")
163 layoutPlugin("SpellChecker", "spellchecker", "spellchecker-core") {
164 fileset(dir: "$home/plugins/spellchecker/lib")
168 layoutPlugin("maven") {
169 fileset(dir: "$home/plugins/maven/lib")
173 layoutPlugin("git4idea") {
174 fileset(dir: "$home/plugins/git4idea/lib", excludes: "**/trilead-ssh2-src.zip")
177 layoutPlugin("svn4idea") {
178 fileset(dir: "$home/plugins/svn4idea/lib", excludes: "**/svnkitsrc.zip")
184 jar("junit-rt.jar") {
187 jar("idea-junit.jar") {
195 dir("cvsIntegration") {
197 jar("cvs_util.jar") {noResources("cvs-core")}
198 jar("cvsIntegration.jar") {noResources("cvs-plugin")}
199 jar("javacvs-src.jar") {noResources("javacvs-src")}
200 jar("smartcvs-src.jar") {noResources("smartcvs-src")}
202 resources(["cvs-core", "cvs-plugin", "javacvs-src", "smartcvs-src"])
204 fileset(dir: "${home}/plugins/cvs/lib")
211 jar("uiDesigner.jar") {
212 noResources("ui-designer")
214 resources("ui-designer")
221 noResources("testng")
222 noResources("testng_rt")
227 fileset(dir: "$home/plugins/testng/lib") {
228 include(name: "testng-jdk15.jar")
233 fileset(dir: "$home/plugins/testng/lib") {
234 include(name: "testng-jdk14.jar")
243 module("jetgroovy") {
244 exclude(name: "standardDsls/**")
248 jar("groovy_rt.jar") {module("groovy-rt")}
249 dir("standardDsls") {
250 fileset(dir: "$home/plugins/groovy/resources/standardDsls")
253 fileset(dir: "$home/plugins/groovy/resources/conf")
254 fileset(dir: "${home}/plugins/groovy/lib")
262 //reorder(targetDirectory)
265 def printUnusedModules() {
266 project.modules.values().each {Module m ->
267 if (m["used"] == null && hasSourceRoots(m)) {
268 project.warning("Module ${m.getName()} is not used in project layout")
273 boolean hasSourceRoots(Module module) {
274 !module.sourceRoots.isEmpty()
277 def layoutPlugin(String moduleName) {
278 layoutPlugin(moduleName, moduleName, {})
281 def layoutPlugin(String moduleName, Closure custom) {
282 layoutPlugin(moduleName, moduleName, custom)
285 def layoutPlugin(String pluginName, String moduleName) {
286 layoutPlugin(pluginName, moduleName, {})
289 def layoutPlugin(String pluginName, String moduleName, Closure custom) {
290 layoutPlugin(pluginName, moduleName, pluginName, custom)
293 def layoutPlugin(String pluginName, String moduleName, String jarName) {
294 layoutPlugin(pluginName, moduleName, jarName, {})
297 def layoutPlugin(String pluginName, String moduleName, String jarName, Closure custom) {
300 jar("${jarName}.jar") {
301 noResources(moduleName)
304 resources(moduleName)
310 private def resources(List<String> modules) {
311 jar("resources_en.jar") {
314 patternset(refid: "resources.included")
320 private def resources(String moduleName) {
321 jar("resources_en.jar") {
323 patternset(refid: "resources.included")
328 private def noResources(String moduleName) {
330 patternset(refid: "resources.excluded")
334 def reorder(String home, String targetDirectory) {
335 if (isDefined("util")) {
336 ant.java(classname: "com.intellij.util.io.zip.ReorderJarsMain", fork: "true") {
337 arg(value: "$home/build/order.txt")
338 arg(value: targetDirectory)
339 arg(value: targetDirectory)
340 arg(value: "$home/lib")
342 pathelement(location: util.output)