diff --git a/platform/build-scripts/groovy/org/jetbrains/intellij/build/BuildContext.groovy b/platform/build-scripts/groovy/org/jetbrains/intellij/build/BuildContext.groovy index 1c5ca2e768f2..78783677a31d 100644 --- a/platform/build-scripts/groovy/org/jetbrains/intellij/build/BuildContext.groovy +++ b/platform/build-scripts/groovy/org/jetbrains/intellij/build/BuildContext.groovy @@ -94,6 +94,8 @@ abstract class BuildContext { */ abstract void executeStep(String stepMessage, String stepId, Closure step) + abstract boolean shouldBuildDistributions() + abstract boolean shouldBuildDistributionForOS(String os) static BuildContext createContext(AntBuilder ant, JpsGantProjectBuilder projectBuilder, JpsProject project, JpsGlobal global, diff --git a/platform/build-scripts/groovy/org/jetbrains/intellij/build/BuildOptions.groovy b/platform/build-scripts/groovy/org/jetbrains/intellij/build/BuildOptions.groovy index 72c5f3cb7cfa..d52aec8bc7c8 100644 --- a/platform/build-scripts/groovy/org/jetbrains/intellij/build/BuildOptions.groovy +++ b/platform/build-scripts/groovy/org/jetbrains/intellij/build/BuildOptions.groovy @@ -38,6 +38,11 @@ class BuildOptions { static final String OS_WINDOWS = "windows" static final String OS_MAC = "mac" static final String OS_ALL = "all" + /** + * If this value is set no distributions of the product will be produced, only {@link ProductModulesLayout#pluginModulesToPublish non-bundled plugins} + * will be built. + */ + static final String OS_NONE = "none" /** * Pass comma-separated names of build steps (see below) to 'intellij.build.skip.build.steps' system property to skip them when building locally. diff --git a/platform/build-scripts/groovy/org/jetbrains/intellij/build/impl/BuildContextImpl.groovy b/platform/build-scripts/groovy/org/jetbrains/intellij/build/impl/BuildContextImpl.groovy index 810d7360114d..afc81b18fe20 100644 --- a/platform/build-scripts/groovy/org/jetbrains/intellij/build/impl/BuildContextImpl.groovy +++ b/platform/build-scripts/groovy/org/jetbrains/intellij/build/impl/BuildContextImpl.groovy @@ -270,9 +270,14 @@ class BuildContextImpl extends BuildContext { } } + @Override + boolean shouldBuildDistributions() { + options.targetOS.toLowerCase() != BuildOptions.OS_NONE + } + @Override boolean shouldBuildDistributionForOS(String os) { - options.targetOS.toLowerCase() in [BuildOptions.OS_ALL, os] + shouldBuildDistributions() && options.targetOS.toLowerCase() in [BuildOptions.OS_ALL, os] } @Override diff --git a/platform/build-scripts/groovy/org/jetbrains/intellij/build/impl/BuildTasksImpl.groovy b/platform/build-scripts/groovy/org/jetbrains/intellij/build/impl/BuildTasksImpl.groovy index b922c3dc01a2..3712630d1006 100644 --- a/platform/build-scripts/groovy/org/jetbrains/intellij/build/impl/BuildTasksImpl.groovy +++ b/platform/build-scripts/groovy/org/jetbrains/intellij/build/impl/BuildTasksImpl.groovy @@ -248,39 +248,48 @@ idea.fatal.error.notification=disabled compileModules(buildContext.productProperties.productLayout.includedPluginModules + distributionJARsBuilder.platformModules + buildContext.productProperties.additionalModulesToCompile, buildContext.productProperties.modulesToCompileTests) buildContext.messages.block("Build platform and plugin JARs") { - distributionJARsBuilder.buildJARs() - distributionJARsBuilder.buildAdditionalArtifacts() - } - if (buildContext.productProperties.scrambleMainJar) { - scramble() - } - - layoutShared() - - def propertiesFile = patchIdeaPropertiesFile() - List> tasks = [ - createDistributionForOsTask("win", { BuildContext context -> - context.windowsDistributionCustomizer?.with { new WindowsDistributionBuilder(context, it, propertiesFile, patchedApplicationInfo) } - }), - 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]) - } + if (buildContext.shouldBuildDistributions()) { + distributionJARsBuilder.buildJARs() + distributionJARsBuilder.buildAdditionalArtifacts() } else { - buildContext.messages.info("Skipping building cross-platform distribution because some OS-specific distributions were skipped") + buildContext.messages.info("Skipped building product distributions because 'intellij.build.target.os' property is set to '$BuildOptions.OS_NONE'") + distributionJARsBuilder.buildNonBundledPlugins() + } + } + + if (buildContext.shouldBuildDistributions()) { + if (buildContext.productProperties.scrambleMainJar) { + scramble() + } + + layoutShared() + + def propertiesFile = patchIdeaPropertiesFile() + List> tasks = [ + createDistributionForOsTask("win", { BuildContext context -> + context.windowsDistributionCustomizer?.with { new WindowsDistributionBuilder(context, it, propertiesFile, patchedApplicationInfo) } + }), + 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") + } } } } diff --git a/platform/build-scripts/groovy/org/jetbrains/intellij/build/impl/DistributionJARsBuilder.groovy b/platform/build-scripts/groovy/org/jetbrains/intellij/build/impl/DistributionJARsBuilder.groovy index 1d2f80f40463..960dcbeb28cd 100644 --- a/platform/build-scripts/groovy/org/jetbrains/intellij/build/impl/DistributionJARsBuilder.groovy +++ b/platform/build-scripts/groovy/org/jetbrains/intellij/build/impl/DistributionJARsBuilder.groovy @@ -143,7 +143,8 @@ class DistributionJARsBuilder { void buildJARs() { buildLib() - buildPlugins() + buildBundledPlugins() + buildNonBundledPlugins() def loadingOrderFilePath = buildContext.productProperties.productLayout.classesLoadingOrderFilePath if (loadingOrderFilePath != null) { @@ -235,13 +236,17 @@ class DistributionJARsBuilder { usedModules.addAll(layoutBuilder.usedModules) } - private void buildPlugins() { - def ant = buildContext.ant + private void buildBundledPlugins() { def productLayout = buildContext.productProperties.productLayout def layoutBuilder = createLayoutBuilder() buildPlugins(layoutBuilder, getPluginsByModules(productLayout.bundledPluginModules), "$buildContext.paths.distAll/plugins") usedModules.addAll(layoutBuilder.usedModules) + } + void buildNonBundledPlugins() { + def ant = buildContext.ant + def productLayout = buildContext.productProperties.productLayout + def layoutBuilder = createLayoutBuilder() buildContext.executeStep("Build non-bundled plugins", BuildOptions.NON_BUNDLED_PLUGINS_STEP) { def pluginsToPublish = getPluginsByModules(productLayout.pluginModulesToPublish) if (buildContext.productProperties.setPluginAndIDEVersionInPluginXml) {