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 b165272b6efb..9ca242bd9cfb 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 @@ -1,18 +1,4 @@ -/* - * Copyright 2000-2017 JetBrains s.r.o. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ +// Copyright 2000-2017 JetBrains s.r.o. Use of this source code is governed by the Apache 2.0 license that can be found in the LICENSE file. package org.jetbrains.intellij.build.impl import com.intellij.openapi.util.io.FileUtil @@ -270,20 +256,20 @@ idea.fatal.error.notification=disabled void compileModulesFromProduct() { checkProductProperties() def patchedApplicationInfo = patchApplicationInfo() - def distributionJARsBuilder = new DistributionJARsBuilder(buildContext, patchedApplicationInfo) - compileModulesForDistribution(distributionJARsBuilder) + compileModulesForDistribution(patchedApplicationInfo) } - private compileModulesForDistribution(DistributionJARsBuilder distributionJARsBuilder) { + private DistributionJARsBuilder compileModulesForDistribution(File patchedApplicationInfo) { def productLayout = buildContext.productProperties.productLayout def bundledPlugins = productLayout.bundledPluginModules as Set def moduleNames = productLayout.getIncludedPluginModules(bundledPlugins) + - distributionJARsBuilder.platformModules + - buildContext.productProperties.additionalModulesToCompile + productLayout.platformApiModules + productLayout.platformImplementationModules + + productLayout.additionalPlatformJars.values() + + DistributionJARsBuilder.toolModules + buildContext.productProperties.additionalModulesToCompile compileModules(moduleNames + (buildContext.proprietaryBuildTools.scrambleTool?.additionalModulesToCompile ?: []) + productLayout.mainModules, buildContext.productProperties.modulesToCompileTests) - def pluginsToPublish = distributionJARsBuilder.getPluginsByModules(buildContext.productProperties.productLayout.pluginModulesToPublish) + def pluginsToPublish = DistributionJARsBuilder.getPluginsByModules(buildContext, buildContext.productProperties.productLayout.pluginModulesToPublish) if (buildContext.shouldBuildDistributions()) { def providedModulesFilePath = "${buildContext.paths.artifacts}/${buildContext.productProperties.productCode}-builtinModules.json" buildProvidedModulesList(providedModulesFilePath, moduleNames, productLayout.licenseFilesToBuildSearchableOptions) @@ -296,13 +282,13 @@ idea.fatal.error.notification=disabled } } } - compileModules(pluginsToPublish.collect { it.moduleJars.values() }.flatten() as List) - distributionJARsBuilder.pluginsToPublish.addAll(pluginsToPublish) + def distributionJARsBuilder = new DistributionJARsBuilder(buildContext, patchedApplicationInfo, pluginsToPublish) + compileModules(distributionJARsBuilder.platformModules + (pluginsToPublish.collect { it.moduleJars.values() }.flatten() as List)) //we need this to ensure that all libraries which may be used in the distribution are resolved, even if product modules don't depend on them (e.g. JUnit5) CompilationTasks.create(buildContext).resolveProjectDependencies() - CompilationTasks.create(buildContext).buildProjectArtifacts(distributionJARsBuilder.includedProjectArtifacts) + return distributionJARsBuilder } @Override @@ -311,8 +297,7 @@ idea.fatal.error.notification=disabled copyDependenciesFile() def patchedApplicationInfo = patchApplicationInfo() - def distributionJARsBuilder = new DistributionJARsBuilder(buildContext, patchedApplicationInfo) - compileModulesForDistribution(distributionJARsBuilder) + def distributionJARsBuilder = compileModulesForDistribution(patchedApplicationInfo) buildContext.messages.block("Build platform and plugin JARs") { if (buildContext.shouldBuildDistributions()) { distributionJARsBuilder.buildJARs() @@ -559,7 +544,7 @@ idea.fatal.error.notification=disabled @Override void buildUnpackedDistribution(String targetDirectory) { buildContext.paths.distAll = targetDirectory - def jarsBuilder = new DistributionJARsBuilder(buildContext, patchApplicationInfo()) + def jarsBuilder = new DistributionJARsBuilder(buildContext, patchApplicationInfo(), []) CompilationTasks.create(buildContext).buildProjectArtifacts(jarsBuilder.includedProjectArtifacts) jarsBuilder.buildJARs() layoutShared() 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 be6ca243bdda..7475328bf829 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 @@ -1,18 +1,4 @@ -/* - * Copyright 2000-2017 JetBrains s.r.o. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ +// Copyright 2000-2017 JetBrains s.r.o. Use of this source code is governed by the Apache 2.0 license that can be found in the LICENSE file. package org.jetbrains.intellij.build.impl import com.intellij.openapi.util.MultiValuesMap @@ -46,11 +32,12 @@ class DistributionJARsBuilder { private final Set usedModules = new LinkedHashSet<>() private final PlatformLayout platform private final File patchedApplicationInfo - private final List pluginsToPublish = [] + private final List pluginsToPublish - DistributionJARsBuilder(BuildContext buildContext, File patchedApplicationInfo) { + DistributionJARsBuilder(BuildContext buildContext, File patchedApplicationInfo, List pluginsToPublish) { this.patchedApplicationInfo = patchedApplicationInfo this.buildContext = buildContext + this.pluginsToPublish = pluginsToPublish buildContext.ant.patternset(id: RESOURCES_INCLUDED) { include(name: "**/*Bundle*.properties") include(name: "**/*Messages.properties") @@ -79,9 +66,8 @@ class DistributionJARsBuilder { } def productLayout = buildContext.productProperties.productLayout - def enabledPluginModules = getEnabledPluginModules() - List projectLibrariesUsedByPlugins = getPluginsByModules(enabledPluginModules).collectMany { plugin -> + List projectLibrariesUsedByPlugins = getPluginsByModules(buildContext, enabledPluginModules).collectMany { plugin -> plugin.getActualModules(enabledPluginModules).values().collectMany { def module = buildContext.findRequiredModule(it) JpsJavaExtensionService.dependencies(module).includedIn(JpsJavaClasspathKind.PRODUCTION_RUNTIME).libraries.findAll { @@ -143,7 +129,13 @@ class DistributionJARsBuilder { } List getPlatformModules() { - (platform.moduleJars.values() as List) + + (platform.moduleJars.values() as List) + toolModules + } + + /** + * @return module names which are required to run necessary tools from build scripts + */ + static List getToolModules() { ["java-runtime", "platform-main", /*required to build searchable options index*/ "updater"] } @@ -247,14 +239,10 @@ class DistributionJARsBuilder { usedModules.addAll(layoutBuilder.usedModules) } - List getPluginsToPublish() { - return pluginsToPublish - } - private void buildBundledPlugins() { def productLayout = buildContext.productProperties.productLayout def layoutBuilder = createLayoutBuilder() - buildPlugins(layoutBuilder, getPluginsByModules(productLayout.bundledPluginModules), "$buildContext.paths.distAll/plugins") + buildPlugins(layoutBuilder, getPluginsByModules(buildContext, productLayout.bundledPluginModules), "$buildContext.paths.distAll/plugins") usedModules.addAll(layoutBuilder.usedModules) } @@ -304,7 +292,7 @@ class DistributionJARsBuilder { return plugin.versionEvaluator.apply(buildContext) } - List getPluginsByModules(Collection modules) { + static List getPluginsByModules(BuildContext buildContext, Collection modules) { def allNonTrivialPlugins = buildContext.productProperties.productLayout.allNonTrivialPlugins def allOptionalModules = allNonTrivialPlugins.collectMany {it.optionalModules} def nonTrivialPlugins = allNonTrivialPlugins.groupBy { it.mainModule }