From d6e4697c9c4eefaf50854f348f474508750e072f Mon Sep 17 00:00:00 2001 From: nik Date: Thu, 21 Jul 2016 18:10:38 +0300 Subject: [PATCH] build scripts: correctly exclude files which need to be scrambled from 'lib' directory when building on Windows; added additional check to make sure that such files aren't copied to 'lib' directory --- .../intellij/build/ScrambleTool.groovy | 5 +++++ .../build/impl/DistributionJARsBuilder.groovy | 20 +++++++++++-------- 2 files changed, 17 insertions(+), 8 deletions(-) diff --git a/build/groovy/org/jetbrains/intellij/build/ScrambleTool.groovy b/build/groovy/org/jetbrains/intellij/build/ScrambleTool.groovy index f4b82a995c8b..a885565770f6 100644 --- a/build/groovy/org/jetbrains/intellij/build/ScrambleTool.groovy +++ b/build/groovy/org/jetbrains/intellij/build/ScrambleTool.groovy @@ -31,4 +31,9 @@ interface ScrambleTool { * Scramble {@code mainJarName} in {@code "$buildContext.paths.distAll/lib"} directory */ void scramble(String mainJarName, BuildContext buildContext) + + /** + * @return list of names of JAR files which cannot be included into the product 'lib' directory in plain form + */ + List getNamesOfJarsRequiredToBeScrambled() } \ No newline at end of file diff --git a/build/groovy/org/jetbrains/intellij/build/impl/DistributionJARsBuilder.groovy b/build/groovy/org/jetbrains/intellij/build/impl/DistributionJARsBuilder.groovy index d55e27903dc3..797f44f48da2 100644 --- a/build/groovy/org/jetbrains/intellij/build/impl/DistributionJARsBuilder.groovy +++ b/build/groovy/org/jetbrains/intellij/build/impl/DistributionJARsBuilder.groovy @@ -31,6 +31,7 @@ package org.jetbrains.intellij.build.impl import com.intellij.openapi.util.io.FileUtil +import com.intellij.util.PathUtilRt import org.jetbrains.intellij.build.BuildContext import org.jetbrains.intellij.build.BuildOptions import org.jetbrains.jps.model.java.JpsJavaClasspathKind @@ -125,7 +126,16 @@ class DistributionJARsBuilder { layoutBuilder.patchModuleOutput("platform-resources", FileUtil.toSystemIndependentName(patchedKeyMapDir.absolutePath)) } - Set usedJars = collectUsedJars(includedModules, []) - productLayout.additionalJarsToUnpackIntoMainJar + Set usedJars = collectUsedJars(includedModules, []) - productLayout.additionalJarsToUnpackIntoMainJar.collect {FileUtil.toSystemIndependentName(it)} + + if (buildContext.scrambleTool != null) { + def forbiddenJarNames = buildContext.scrambleTool.namesOfJarsRequiredToBeScrambled + def forbiddenJars = usedJars.findAll { forbiddenJarNames.contains(PathUtilRt.getFileName(it)) } + if (!forbiddenJars.empty) { + buildContext.messages.error("The following JARs cannot be included into the product 'lib' directory, they need to be scrambled with the main jar: ${forbiddenJars}") + } + } + def communityHome = "$buildContext.paths.communityHome" def resourcesIncluded = RESOURCES_INCLUDED def resourcesExcluded = RESOURCES_EXCLUDED @@ -360,12 +370,6 @@ class DistributionJARsBuilder { (["$buildContext.paths.communityHome/lib", "$buildContext.paths.projectHome/lib", "$buildContext.paths.communityHome/xml/relaxng/lib"] as List) + additionalLibFolders - def forbiddenJars = [ -// "/dev/", "/rt/", "/ant/", -// "ls-client-api", "/ideaLicenseDecoder", "jcip-annotations", -// "/eawtstub.jar", "/y.jar", "/ysvg.jar" - ] - modules.each { def module = buildContext.findModule(it) if (module != null) { @@ -373,7 +377,7 @@ class DistributionJARsBuilder { File file = new File(it) if (file.exists()) { String path = FileUtil.toSystemIndependentName(file.canonicalPath) - if (path.endsWith(".jar") && approvedJars.any { FileUtil.startsWith(path, it) } && !forbiddenJars.any { path.contains(it) }) { + if (path.endsWith(".jar") && approvedJars.any { FileUtil.startsWith(path, it) }) { if (usedJars.add(path)) { buildContext.messages.info("\tADDED: $path for $module.name") }