From c6cf8e3411bf63c1c3fc4581fe3b8edcf12ef4aa Mon Sep 17 00:00:00 2001 From: nik Date: Wed, 18 Jan 2017 18:01:51 +0300 Subject: [PATCH] build scripts: use patterns from 'excludeFromModule' as is and check that these patterns are valid (IDEA-166676) --- .../build/CommunityRepositoryModules.groovy | 4 ++-- .../build/ProductModulesLayout.groovy | 2 +- .../intellij/build/impl/BaseLayoutSpec.groovy | 13 +++++++------ .../build/impl/DistributionJARsBuilder.groovy | 19 ++++++++++++++++++- 4 files changed, 28 insertions(+), 10 deletions(-) diff --git a/platform/build-scripts/groovy/org/jetbrains/intellij/build/CommunityRepositoryModules.groovy b/platform/build-scripts/groovy/org/jetbrains/intellij/build/CommunityRepositoryModules.groovy index 58e98a4d1a0a..8d8ca3ad18af 100644 --- a/platform/build-scripts/groovy/org/jetbrains/intellij/build/CommunityRepositoryModules.groovy +++ b/platform/build-scripts/groovy/org/jetbrains/intellij/build/CommunityRepositoryModules.groovy @@ -154,7 +154,7 @@ class CommunityRepositoryModules { }, plugin("student-python") { withResource("resources/courses", "lib/courses") - excludeFromModule("student-python", "courses") + excludeFromModule("student-python", "courses/**") }, plugin("maven") { withModule("maven-jps-plugin") @@ -333,7 +333,7 @@ class CommunityRepositoryModules { mainJarName = "Groovy.jar" withModule("groovy-psi", mainJarName) withModule("structuralsearch-groovy", mainJarName) - excludeFromModule("groovy-psi", "standardDsls") + excludeFromModule("groovy-psi", "standardDsls/**") withModule("groovy-jps-plugin") withModule("groovy_rt") withModule("groovy-rt-constants") diff --git a/platform/build-scripts/groovy/org/jetbrains/intellij/build/ProductModulesLayout.groovy b/platform/build-scripts/groovy/org/jetbrains/intellij/build/ProductModulesLayout.groovy index 76a82cd77302..35643f70e7a8 100644 --- a/platform/build-scripts/groovy/org/jetbrains/intellij/build/ProductModulesLayout.groovy +++ b/platform/build-scripts/groovy/org/jetbrains/intellij/build/ProductModulesLayout.groovy @@ -76,7 +76,7 @@ class ProductModulesLayout { MultiValuesMap additionalPlatformJars = new MultiValuesMap<>(true) /** - * Module name to entries which should be excluded from its output. + * Module name to list of Ant-like patterns describing entries which should be excluded from its output. * This is a temporary property added to keep layout of some products. If some directory from a module shouldn't be included into the * product JAR it's strongly recommended to move that directory outside of the module source roots. */ diff --git a/platform/build-scripts/groovy/org/jetbrains/intellij/build/impl/BaseLayoutSpec.groovy b/platform/build-scripts/groovy/org/jetbrains/intellij/build/impl/BaseLayoutSpec.groovy index d3c0ae66a1d2..76d5bf96cfb3 100644 --- a/platform/build-scripts/groovy/org/jetbrains/intellij/build/impl/BaseLayoutSpec.groovy +++ b/platform/build-scripts/groovy/org/jetbrains/intellij/build/impl/BaseLayoutSpec.groovy @@ -61,12 +61,13 @@ class BaseLayoutSpec { } /** - * Exclude the specified directory when {@code moduleName} is packed into JAR file. - * This is a temporary method added to keep layout of some old plugins. If some directory from a module shouldn't be included into the - * module JAR it's strongly recommended to move that directory outside of the module source roots. - * @param excludedDirectory path to the directory to be exclude relatively to the module output root + * Exclude the specified files when {@code moduleName} is packed into JAR file. + * This is a temporary method added to keep layout of some old plugins. If some files from a module shouldn't be included into the + * module JAR it's strongly recommended to move these files outside of the module source roots. + * @param excludedPattern Ant-like pattern describing files to be excluded (relatively to the module output root); e.g. {@code "foo/**"} + * to exclude 'foo' directory */ - void excludeFromModule(String moduleName, String excludedDirectory) { - layout.moduleExcludes.put(moduleName, excludedDirectory) + void excludeFromModule(String moduleName, String excludedPattern) { + layout.moduleExcludes.put(moduleName, excludedPattern) } } 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 1136f692ee5e..44d8e5b716e8 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 @@ -17,6 +17,7 @@ package org.jetbrains.intellij.build.impl import com.intellij.openapi.util.MultiValuesMap import com.intellij.openapi.util.io.FileUtil +import org.apache.tools.ant.types.FileSet import org.jetbrains.intellij.build.BuildContext import org.jetbrains.intellij.build.BuildOptions import org.jetbrains.intellij.build.BuildTasks @@ -301,6 +302,7 @@ class DistributionJARsBuilder { def resourceExcluded = RESOURCES_EXCLUDED def resourcesIncluded = RESOURCES_INCLUDED def buildContext = buildContext + checkModuleExcludes(layout.moduleExcludes) layoutBuilder.layout(targetDirectory) { dir("lib") { moduleJars.entrySet().each { @@ -319,7 +321,7 @@ class DistributionJARsBuilder { } layout.moduleExcludes.get(moduleName)?.each { //noinspection GrUnresolvedAccess - ant.exclude(name: "$it/**") + ant.exclude(name: it) } } } @@ -394,6 +396,21 @@ class DistributionJARsBuilder { } } + private void checkModuleExcludes(MultiValuesMap moduleExcludes) { + moduleExcludes.entrySet().each { entry -> + String module = entry.key + entry.value.each { pattern -> + def fileSet = new FileSet() + fileSet.setProject(buildContext.ant.antProject) + fileSet.setDir(new File(buildContext.projectBuilder.getModuleOutput(buildContext.findRequiredModule(module), false))) + fileSet.createInclude().setName(pattern) + if (fileSet.size() == 0) { + buildContext.messages.error("Incorrect exludes for module '$module': nothing matches to $pattern in the module output") + } + } + } + } + static String basePath(BuildContext buildContext, String moduleName) { JpsPathUtil.urlToPath(buildContext.findRequiredModule(moduleName).contentRootsList.urls.first()) }