diff --git a/build/groovy/org/jetbrains/intellij/build/BuildTasks.groovy b/build/groovy/org/jetbrains/intellij/build/BuildTasks.groovy index 2f5bf5c79eff..dc56e6436be0 100644 --- a/build/groovy/org/jetbrains/intellij/build/BuildTasks.groovy +++ b/build/groovy/org/jetbrains/intellij/build/BuildTasks.groovy @@ -38,33 +38,11 @@ abstract class BuildTasks { */ abstract void zipSourcesOfModules(Collection modules, String targetFilePath) - /** - * Updates search/searchableOptions.xml file in {@code targetModuleName} module output directory - *
- * todo[nik] this is temporary solution until code from layouts.gant files moved to the new builders. After that this method will - * be called inside {@link #buildDistributions()} - */ - abstract void buildSearchableOptions(String targetModuleName, List modulesToIndex, List pathsToLicenses) - - /** - * Creates a copy of *ApplicationInfo.xml file with substituted __BUILD_NUMBER__ and __BUILD_DATE__ placeholders - *
- * todo[nik] this is temporary solution until code from layouts.gant files moved to the new builders. After that this method will - * be called inside {@link #buildDistributions()} - * @return path to the copied file - */ - abstract File patchApplicationInfo() - - /** - * Creates distribution for all operating systems from JAR files located at {@link BuildPaths#distAll} - */ - abstract void buildDistributions() - /** * Produces distributions for all operating systems from sources. This includes compiling required modules, packing their output into JAR * files accordingly to {@link ProductProperties#productLayout}, and creating distributions and installers for all OS. */ - abstract void compileModulesAndBuildDistributions() + abstract void buildDistributions() abstract void compileProjectAndTests(List includingTestsInModules) @@ -97,6 +75,6 @@ abstract class BuildTasks { ProductProperties productProperties = (ProductProperties) Class.forName(productPropertiesClassName).constructors[0].newInstance(projectHome) def context = BuildContext.createContext(binding.ant, binding.projectBuilder, binding.project, binding.global, "$projectHome/$communityHomeRelativePath", projectHome, productProperties, proprietaryBuildTools) - create(context).compileModulesAndBuildDistributions() + create(context).buildDistributions() } } \ No newline at end of file diff --git a/build/groovy/org/jetbrains/intellij/build/IdeaCommunityBuilder.groovy b/build/groovy/org/jetbrains/intellij/build/IdeaCommunityBuilder.groovy index 3e4038b752e7..c08dceb9ac7e 100644 --- a/build/groovy/org/jetbrains/intellij/build/IdeaCommunityBuilder.groovy +++ b/build/groovy/org/jetbrains/intellij/build/IdeaCommunityBuilder.groovy @@ -41,13 +41,13 @@ class IdeaCommunityBuilder { } void buildDistJars() { - BuildTasks.create(buildContext).compileModulesAndBuildDistributions() + BuildTasks.create(buildContext).buildDistributions() layoutAdditionalArtifacts() } void buildDistributions() { def tasks = BuildTasks.create(buildContext) - tasks.compileModulesAndBuildDistributions() + tasks.buildDistributions() layoutAdditionalArtifacts(true) tasks.buildUpdaterJar() } diff --git a/build/groovy/org/jetbrains/intellij/build/ProductProperties.groovy b/build/groovy/org/jetbrains/intellij/build/ProductProperties.groovy index 78d246f8b6b0..a31b68493867 100644 --- a/build/groovy/org/jetbrains/intellij/build/ProductProperties.groovy +++ b/build/groovy/org/jetbrains/intellij/build/ProductProperties.groovy @@ -164,8 +164,6 @@ abstract class ProductProperties { */ boolean enableYourkitAgentInEAP = false - List excludedPlugins = [] - /** * Specified additional modules (not included into the product layout) which need to be compiled when product is built. * todo[nik] get rid of this diff --git a/build/groovy/org/jetbrains/intellij/build/impl/BuildContextImpl.groovy b/build/groovy/org/jetbrains/intellij/build/impl/BuildContextImpl.groovy index 6238cc0a438c..369ea2a80951 100644 --- a/build/groovy/org/jetbrains/intellij/build/impl/BuildContextImpl.groovy +++ b/build/groovy/org/jetbrains/intellij/build/impl/BuildContextImpl.groovy @@ -311,9 +311,7 @@ class BuildContextImpl extends BuildContext { private boolean isJavaSupportedInProduct() { def productLayout = productProperties.productLayout - return productLayout.mainJarName == null || - //todo[nik] remove this condition later; currently build scripts for IDEA don't fully migrated to the new scheme - productLayout.includedPlatformModules.contains("execution-impl") + return productLayout.includedPlatformModules.contains("execution-impl") } @CompileDynamic diff --git a/build/groovy/org/jetbrains/intellij/build/impl/BuildTasksImpl.groovy b/build/groovy/org/jetbrains/intellij/build/impl/BuildTasksImpl.groovy index 9d5fcfb40b60..118e7c8f6699 100644 --- a/build/groovy/org/jetbrains/intellij/build/impl/BuildTasksImpl.groovy +++ b/build/groovy/org/jetbrains/intellij/build/impl/BuildTasksImpl.groovy @@ -91,12 +91,6 @@ class BuildTasksImpl extends BuildTasks { } } - @Override - void buildSearchableOptions(String targetModuleName, List modulesToIndex, List pathsToLicenses) { - buildSearchableOptions(new File(buildContext.projectBuilder.moduleOutput(buildContext.findRequiredModule(targetModuleName))), modulesToIndex, pathsToLicenses) - } - -//todo[nik] do we need 'cp' and 'jvmArgs' parameters? void buildSearchableOptions(File targetDirectory, List modulesToIndex, List pathsToLicenses) { buildContext.executeStep("Build searchable options index", BuildOptions.SEARCHABLE_OPTIONS_INDEX_STEP, { def javaRuntimeClasses = "${buildContext.projectBuilder.moduleOutput(buildContext.findModule("java-runtime"))}" @@ -187,7 +181,6 @@ idea.fatal.error.notification=disabled return propertiesFile } - @Override File patchApplicationInfo() { def sourceFile = buildContext.findApplicationInfoInSources() def targetFile = new File(buildContext.paths.temp, sourceFile.name) @@ -229,38 +222,6 @@ idea.fatal.error.notification=disabled src.filterLine { String it -> !it.contains('appender-ref ref="CONSOLE-WARN"') }.writeTo(dst.newWriter()).close() } - @Override - void buildDistributions() { - layoutShared() - - def propertiesFile = patchIdeaPropertiesFile() - List> tasks = [ - createDistributionForOsTask("win", { BuildContext context -> - context.windowsDistributionCustomizer?.with {new WindowsDistributionBuilder(context, it, propertiesFile)} - }), - createDistributionForOsTask("linux", { BuildContext context -> - context.linuxDistributionCustomizer?.with {new LinuxDistributionBuilder(context, it, propertiesFile)} - }), - createDistributionForOsTask("mac", { BuildContext context -> - context.macDistributionCustomizer?.with {new MacDistributionBuilder(context, it, propertiesFile)} - }) - ] - - List paths = runInParallel(tasks).findAll {it != null} - - if (buildContext.productProperties.buildCrossPlatformDistribution) { - if (paths.size() == 3) { - buildContext.executeStep("Build cross-platform distribution", BuildOptions.CROSS_PLATFORM_DISTRIBUTION_STEP) { - def crossPlatformBuilder = new CrossPlatformDistributionBuilder(buildContext) - crossPlatformBuilder.buildCrossPlatformZip(paths[0], paths[1], paths[2]) - } - } - else { - buildContext.messages.info("Skipping building cross-platform distribution because some OS-specific distributions were skipped") - } - } - } - private static BuildTaskRunnable createDistributionForOsTask(String taskName, Function factory) { new BuildTaskRunnable(taskName) { @Override @@ -279,8 +240,9 @@ idea.fatal.error.notification=disabled } @Override - void compileModulesAndBuildDistributions() { + void buildDistributions() { checkProductProperties() + def distributionJARsBuilder = new DistributionJARsBuilder(buildContext) compileModules(buildContext.productProperties.productLayout.includedPluginModules + distributionJARsBuilder.platformModules + buildContext.productProperties.additionalModulesToCompile, buildContext.productProperties.modulesToCompileTests) @@ -289,24 +251,56 @@ idea.fatal.error.notification=disabled distributionJARsBuilder.buildAdditionalArtifacts() } if (buildContext.productProperties.scrambleMainJar) { - if (buildContext.proprietaryBuildTools.scrambleTool != null) { - buildContext.proprietaryBuildTools.scrambleTool.scramble(buildContext.productProperties.productLayout.mainJarName, buildContext) + scramble() + } + + layoutShared() + + def propertiesFile = patchIdeaPropertiesFile() + List> tasks = [ + createDistributionForOsTask("win", { BuildContext context -> + context.windowsDistributionCustomizer?.with { new WindowsDistributionBuilder(context, it, propertiesFile) } + }), + createDistributionForOsTask("linux", { BuildContext context -> + context.linuxDistributionCustomizer?.with { new LinuxDistributionBuilder(context, it, propertiesFile) } + }), + createDistributionForOsTask("mac", { BuildContext context -> + context.macDistributionCustomizer?.with { new MacDistributionBuilder(context, it, propertiesFile) } + }) + ] + + List paths = runInParallel(tasks).findAll { it != null } + + if (buildContext.productProperties.buildCrossPlatformDistribution) { + if (paths.size() == 3) { + buildContext.executeStep("Build cross-platform distribution", BuildOptions.CROSS_PLATFORM_DISTRIBUTION_STEP) { + def crossPlatformBuilder = new CrossPlatformDistributionBuilder(buildContext) + crossPlatformBuilder.buildCrossPlatformZip(paths[0], paths[1], paths[2]) + } } else { - buildContext.messages.warning("Scrambling skipped: 'scrambleTool' isn't defined") + buildContext.messages.info("Skipping building cross-platform distribution because some OS-specific distributions were skipped") } - buildContext.ant.zip(destfile: "$buildContext.paths.artifacts/internalUtilities.zip") { - fileset(file: "$buildContext.paths.buildOutputRoot/internal/internalUtilities.jar") - fileset(dir: "$buildContext.paths.communityHome/lib") { - include(name: "junit-4*.jar") - include(name: "hamcrest-core-*.jar") - } - zipfileset(src: "$buildContext.paths.buildOutputRoot/internal/internalUtilities.jar") { - include(name: "*.xml") - } + } + } + + private void scramble() { + if (buildContext.proprietaryBuildTools.scrambleTool != null) { + buildContext.proprietaryBuildTools.scrambleTool.scramble(buildContext.productProperties.productLayout.mainJarName, buildContext) + } + else { + buildContext.messages.warning("Scrambling skipped: 'scrambleTool' isn't defined") + } + buildContext.ant.zip(destfile: "$buildContext.paths.artifacts/internalUtilities.zip") { + fileset(file: "$buildContext.paths.buildOutputRoot/internal/internalUtilities.jar") + fileset(dir: "$buildContext.paths.communityHome/lib") { + include(name: "junit-4*.jar") + include(name: "hamcrest-core-*.jar") + } + zipfileset(src: "$buildContext.paths.buildOutputRoot/internal/internalUtilities.jar") { + include(name: "*.xml") } } - buildDistributions() } private void checkProductProperties() { diff --git a/build/groovy/org/jetbrains/intellij/build/impl/CrossPlatformDistributionBuilder.groovy b/build/groovy/org/jetbrains/intellij/build/impl/CrossPlatformDistributionBuilder.groovy index 88a408519817..ba9494402aa4 100644 --- a/build/groovy/org/jetbrains/intellij/build/impl/CrossPlatformDistributionBuilder.groovy +++ b/build/groovy/org/jetbrains/intellij/build/impl/CrossPlatformDistributionBuilder.groovy @@ -59,7 +59,6 @@ class CrossPlatformDistributionBuilder { buildContext.ant.zip(zipfile: targetPath, duplicate: "fail") { fileset(dir: buildContext.paths.distAll) { exclude(name: "bin/idea.properties") - exclude(name: "lib/libpty/**") //todo[nik] this is temporary workaround until IDEA fully migrates to the new scheme } fileset(dir: zipDir) diff --git a/build/groovy/org/jetbrains/intellij/build/impl/WindowsDistributionBuilder.groovy b/build/groovy/org/jetbrains/intellij/build/impl/WindowsDistributionBuilder.groovy index d2e245facb84..55f3e4d1f2a9 100644 --- a/build/groovy/org/jetbrains/intellij/build/impl/WindowsDistributionBuilder.groovy +++ b/build/groovy/org/jetbrains/intellij/build/impl/WindowsDistributionBuilder.groovy @@ -101,7 +101,6 @@ class WindowsDistributionBuilder extends OsSpecificDistributionBuilder { private void generateScripts(String winDistPath) { String fullName = buildContext.applicationInfo.productName - //todo[nik] looks like names without .exe were also supported, do we need this? String vmOptionsFileName = "${buildContext.productProperties.baseFileName}%BITS%.exe" String classPath = "SET CLASS_PATH=%IDE_HOME%\\lib\\${buildContext.bootClassPathJarNames[0]}\n" diff --git a/build/scripts/layouts.gant b/build/scripts/layouts.gant index b9ce6b6cf519..93b097440515 100644 --- a/build/scripts/layouts.gant +++ b/build/scripts/layouts.gant @@ -16,6 +16,7 @@ import org.jetbrains.intellij.build.* +import org.jetbrains.intellij.build.impl.BuildTasksImpl import org.jetbrains.jps.util.JpsPathUtil import static org.jetbrains.jps.idea.IdeaProjectLoader.guessHome @@ -41,7 +42,7 @@ boolean setPluginAndIDEVersionInPluginXml() { } List getExcludedPlugins() { - return isDefined("productProperties") ? productProperties.excludedPlugins : [] + return [] } /** @@ -51,7 +52,7 @@ def layoutFull(BuildContext context) { binding.setVariable("productProperties", context.productProperties) String home = context.paths.communityHome String targetDirectory = context.paths.distAll - File patchedApplicationInfo = BuildTasks.create(context).patchApplicationInfo() + File patchedApplicationInfo = ((BuildTasksImpl)BuildTasks.create(context)).patchApplicationInfo() projectBuilder.stage("layout to $targetDirectory") List jpsCommonModules = ["jps-model-impl", "jps-model-serialization"]