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", "jsp-base-openapi"].flatten()
54 //noinspection GroovyAssignabilityCheck
55 List<String> implementationModules = [platformImplementationModules(),
65 "RegExpSupport"].flatten()
67 ant.patternset(id: "resources.included") {
68 include(name: "**/*.properties")
69 include(name: "fileTemplates/**/*")
70 include(name: "inspectionDescriptions/**/*")
71 include(name: "intentionDescriptions/**/*")
72 include(name: "tips/**/*")
75 ant.patternset(id: "resources.excluded") {
76 exclude(name: "**/*.properties")
77 exclude(name: "fileTemplates/**/*")
78 exclude(name: "fileTemplates")
79 exclude(name: "inspectionDescriptions/**/*")
80 exclude(name: "inspectionDescriptions")
81 exclude(name: "intentionDescriptions/**/*")
82 exclude(name: "intentionDescriptions")
83 exclude(name: "tips/**/*")
87 layout(targetDirectory) {
89 jar("util.jar") { module("util") }
92 openapiModules.each { module it}
95 jar("annotations.jar") { module("annotations")}
96 jar("extensions.jar") { module("extensions")}
99 implementationModules.each { module it}
102 jar("bootstrap.jar") { module("bootstrap")}
103 jar("resources.jar") {
105 module("platform-resources")
106 module("community-resources")
109 jar("idea_rt.jar") { module("java-runtime")}
111 jar("forms_rt.jar") {
113 module("forms-compiler")
116 jar("resources_en.jar") {
117 module("resources-en")
118 module("platform-resources-en")
121 jar("icons.jar") { module("icons") }
122 jar("boot.jar") { module("boot") }
126 module("forms-compiler")
131 fileset(dir: "$home/lib") {
132 include(name: "*.jar")
133 exclude(name: "eawtstub.jar")
136 fileset(dir: "$home/lib/src") {
137 include(name: "trove4j_changes.txt")
138 include(name: "trove4j_src.jar")
142 fileset(dir: "$home/lib/ant") {
143 exclude(name: "**/src/**")
149 def simplePlugins = ["commander", "copyright", "properties", "java-i18n", "images"]
155 layoutPlugin("ant", "ant", "antIntegration")
156 layoutPlugin("InspectionGadgets", "InspectionGadgetsPlugin")
157 layoutPlugin("IntelliLang", "IntelliLangJava")
158 layoutPlugin("IntentionPowerPack", "IntentionPowerPackPlugin")
159 layoutPlugin("ToString", "generate-tostring", "toString")
161 layoutPlugin("SpellChecker", "spellchecker", "spellchecker-core") {
162 fileset(dir: "$home/plugins/spellchecker/lib")
166 layoutPlugin("maven") {
167 fileset(dir: "$home/plugins/maven/lib")
171 layoutPlugin("git4idea") {
172 fileset(dir: "$home/plugins/git4idea/lib", excludes: "**/trilead-ssh2-src.zip")
175 layoutPlugin("svn4idea") {
176 fileset(dir: "$home/plugins/svn4idea/lib", excludes: "**/svnkitsrc.zip")
182 jar("junit-rt.jar") {
185 jar("idea-junit.jar") {
193 dir("cvsIntegration") {
195 jar("cvs_util.jar") {noResources("cvs-core")}
196 jar("cvsIntegration.jar") {noResources("cvs-plugin")}
197 jar("javacvs-src.jar") {noResources("javacvs-src")}
198 jar("smartcvs-src.jar") {noResources("smartcvs-src")}
200 resources(["cvs-core", "cvs-plugin", "javacvs-src", "smartcvs-src"])
202 fileset(dir: "${home}/plugins/cvs/lib")
209 jar("uiDesigner.jar") {
210 noResources("ui-designer")
212 resources("ui-designer")
219 noResources("testng")
220 noResources("testng_rt")
225 fileset(dir: "$home/plugins/testng/lib") {
226 include(name: "testng-jdk15.jar")
231 fileset(dir: "$home/plugins/testng/lib") {
232 include(name: "testng-jdk14.jar")
241 module("jetgroovy") {
242 exclude(name: "standardDsls/**")
246 jar("groovy_rt.jar") {module("groovy-rt")}
247 dir("standardDsls") {
248 fileset(dir: "$home/plugins/groovy/resources/standardDsls")
251 fileset(dir: "$home/plugins/groovy/resources/conf")
252 fileset(dir: "${home}/plugins/groovy/lib")
260 //reorder(targetDirectory)
263 def printUnusedModules() {
264 project.modules.values().each {Module m ->
265 if (m["used"] == null && hasSourceRoots(m)) {
266 project.warning("Module ${m.getName()} is not used in project layout")
271 boolean hasSourceRoots(Module module) {
272 !module.sourceRoots.isEmpty()
275 def layoutPlugin(String moduleName) {
276 layoutPlugin(moduleName, moduleName, {})
279 def layoutPlugin(String moduleName, Closure custom) {
280 layoutPlugin(moduleName, moduleName, custom)
283 def layoutPlugin(String pluginName, String moduleName) {
284 layoutPlugin(pluginName, moduleName, {})
287 def layoutPlugin(String pluginName, String moduleName, Closure custom) {
288 layoutPlugin(pluginName, moduleName, pluginName, custom)
291 def layoutPlugin(String pluginName, String moduleName, String jarName) {
292 layoutPlugin(pluginName, moduleName, jarName, {})
295 def layoutPlugin(String pluginName, String moduleName, String jarName, Closure custom) {
298 jar("${jarName}.jar") {
299 noResources(moduleName)
302 resources(moduleName)
308 private def resources(List<String> modules) {
309 jar("resources_en.jar") {
312 patternset(refid: "resources.included")
318 private def resources(String moduleName) {
319 jar("resources_en.jar") {
321 patternset(refid: "resources.included")
326 private def noResources(String moduleName) {
328 patternset(refid: "resources.excluded")
332 def reorder(String home, String targetDirectory) {
333 if (isDefined("util")) {
334 ant.java(classname: "com.intellij.util.io.zip.ReorderJarsMain", fork: "true") {
335 arg(value: "$home/build/order.txt")
336 arg(value: targetDirectory)
337 arg(value: targetDirectory)
338 arg(value: "$home/lib")
340 pathelement(location: util.output)