From ab3092e6697e60af7e89f6dd9bc5c8ed48a6f8b3 Mon Sep 17 00:00:00 2001 From: "Dmitriy.Panov" Date: Fri, 14 Dec 2018 13:51:46 +0300 Subject: [PATCH] `build/jdk` made configurable to prevent cleanup on branch change (for Cherry-Pick robot): property name fix, fail when starting Gradle not on Java 1.8 --- build/dependencies/setupJdk.gradle | 2 +- .../intellij/build/BuildOptions.groovy | 6 +++++ .../intellij/build/GradleRunner.groovy | 3 --- .../build/impl/CompilationContextImpl.groovy | 26 +++++++++---------- .../build/impl/CompilationTasksImpl.groovy | 2 +- .../intellij/build/impl/JdkUtils.groovy | 11 +++----- 6 files changed, 23 insertions(+), 27 deletions(-) diff --git a/build/dependencies/setupJdk.gradle b/build/dependencies/setupJdk.gradle index efd3655273e4..d59a3fb27bf0 100644 --- a/build/dependencies/setupJdk.gradle +++ b/build/dependencies/setupJdk.gradle @@ -6,7 +6,7 @@ cleanSetupJdks.dependsOn('cleanSetupJdk18', 'cleanSetupJdk16', 'cleanDownloadJdk def jdkRepo = 'https://cache-redirector.jetbrains.com' -def jdkDir = System.getProperty('jdk.dir')?.with { +def jdkDir = System.getProperty('intellij.build.jdks.target.dir')?.with { def jdkDir = new File(it) jdkDir.mkdirs() jdkDir 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 5c62941b3bd9..7b0d0adbf5e5 100644 --- a/platform/build-scripts/groovy/org/jetbrains/intellij/build/BuildOptions.groovy +++ b/platform/build-scripts/groovy/org/jetbrains/intellij/build/BuildOptions.groovy @@ -125,4 +125,10 @@ class BuildOptions { * Specifies JRE build to be bundled with distributions. If {@code null} then jdkBuild from gradle.properties will be used. */ String bundledJreBuild = System.getProperty("intellij.build.bundled.jre.build") + + /** + * Directory path to unpack Jetbrains JDK builds into + */ + static final String JDKS_TARGET_DIR_OPTION = "intellij.build.jdks.target.dir" + String jdksTargetDir = System.getProperty(JDKS_TARGET_DIR_OPTION) } \ No newline at end of file diff --git a/platform/build-scripts/groovy/org/jetbrains/intellij/build/GradleRunner.groovy b/platform/build-scripts/groovy/org/jetbrains/intellij/build/GradleRunner.groovy index c852820b72fb..70bcfd219211 100644 --- a/platform/build-scripts/groovy/org/jetbrains/intellij/build/GradleRunner.groovy +++ b/platform/build-scripts/groovy/org/jetbrains/intellij/build/GradleRunner.groovy @@ -69,9 +69,6 @@ class GradleRunner { List command = new ArrayList() command.add("${projectDir.absolutePath}/$gradleScript".toString()) command.add("-Djava.io.tmpdir=${System.getProperty('java.io.tmpdir')}".toString()) - System.getProperty('jdk.dir')?.with { - command.add("-Djdk.dir=$it".toString()) - } command.addAll(tasks) command.add('--stacktrace') if (System.getProperty("intellij.build.use.gradle.daemon", "false").toBoolean()) { diff --git a/platform/build-scripts/groovy/org/jetbrains/intellij/build/impl/CompilationContextImpl.groovy b/platform/build-scripts/groovy/org/jetbrains/intellij/build/impl/CompilationContextImpl.groovy index 948ac16f007a..2f303b40739b 100644 --- a/platform/build-scripts/groovy/org/jetbrains/intellij/build/impl/CompilationContextImpl.groovy +++ b/platform/build-scripts/groovy/org/jetbrains/intellij/build/impl/CompilationContextImpl.groovy @@ -65,24 +65,20 @@ class CompilationContextImpl implements CompilationContext { def dependenciesProjectDir = new File(communityHome, 'build/dependencies') logFreeDiskSpace(messages, projectHome, "before downloading dependencies") - def gradleJdk = toCanonicalPath(JdkUtils.computeJdkHome(messages, "jdk8Home", "", "JDK_18_x64", false)) + def gradleJdk = toCanonicalPath(JdkUtils.computeJdkHome(messages, "jdk8Home", "", "JDK_18_x64")) GradleRunner gradle = new GradleRunner(dependenciesProjectDir, messages, gradleJdk) if (!options.isInDevelopmentMode) { - setupCompilationDependencies(gradle) + setupCompilationDependencies(gradle, options) } else { gradle.run('Setting up Kotlin plugin', 'setupKotlinPlugin') } projectHome = toCanonicalPath(projectHome) - def jdk8Home = toCanonicalPath(JdkUtils.computeJdkHome(messages, "jdk8Home", "${jdkDir(projectHome)}/1.8", "JDK_18_x64")) + def jdk8Home = toCanonicalPath(JdkUtils.computeJdkHome(messages, "jdk8Home", "${jdkDir(projectHome, options)}/1.8", "JDK_18_x64")) def kotlinHome = toCanonicalPath("$communityHome/build/dependencies/build/kotlin/Kotlin") - if (!JdkVersionDetector.instance.detectJdkVersionInfo(gradleJdk).version.contains("1.8.")) { - gradle = new GradleRunner(dependenciesProjectDir, messages, jdk8Home) - } - - def model = loadProject(projectHome, jdk8Home, kotlinHome, messages, ant) + def model = loadProject(projectHome, jdk8Home, kotlinHome, messages, options, ant) def oldToNewModuleName = loadModuleRenamingHistory(projectHome, messages) + loadModuleRenamingHistory(communityHome, messages) def context = new CompilationContextImpl(ant, gradle, model, communityHome, projectHome, jdk8Home, kotlinHome, messages, oldToNewModuleName, buildOutputRootEvaluator, options) @@ -91,8 +87,8 @@ class CompilationContextImpl implements CompilationContext { return context } - private static String jdkDir(String projectHome) { - System.getProperty('jdk.dir')?.with { + private static String jdkDir(String projectHome, BuildOptions options) { + options.jdksTargetDir?.with { new File(it).exists() ? it : null } ?: "$projectHome/build/jdk" } @@ -135,7 +131,7 @@ class CompilationContextImpl implements CompilationContext { paths.kotlinHome, messages, oldToNewModuleName, buildOutputRootEvaluator, options) } - private static JpsModel loadProject(String projectHome, String jdkHome, String kotlinHome, BuildMessages messages, AntBuilder ant) { + private static JpsModel loadProject(String projectHome, String jdkHome, String kotlinHome, BuildMessages messages, BuildOptions options, AntBuilder ant) { //we need to add Kotlin JPS plugin to classpath before loading the project to ensure that Kotlin settings will be properly loaded ensureKotlinJpsPluginIsAddedToClassPath(kotlinHome, ant, messages) @@ -144,7 +140,7 @@ class CompilationContextImpl implements CompilationContext { pathVariablesConfiguration.addPathVariable("KOTLIN_BUNDLED", "$kotlinHome/kotlinc") pathVariablesConfiguration.addPathVariable("MAVEN_REPOSITORY", FileUtil.toSystemIndependentName(new File(SystemProperties.getUserHome(), ".m2/repository").absolutePath)) - JdkUtils.defineJdk(model.global, "IDEA jdk", JdkUtils.computeJdkHome(messages, "jdkHome", "${jdkDir(projectHome)}/1.6", "JDK_16_x64")) + JdkUtils.defineJdk(model.global, "IDEA jdk", JdkUtils.computeJdkHome(messages, "jdkHome", "${jdkDir(projectHome, options)}/1.6", "JDK_16_x64")) JdkUtils.defineJdk(model.global, "1.8", jdkHome) def pathVariables = JpsModelSerializationDataService.computeAllPathVariables(model.global) @@ -154,10 +150,12 @@ class CompilationContextImpl implements CompilationContext { } static boolean dependenciesInstalled - static void setupCompilationDependencies(GradleRunner gradle) { + static void setupCompilationDependencies(GradleRunner gradle, BuildOptions options) { if (!dependenciesInstalled) { dependenciesInstalled = true - gradle.run('Setting up compilation dependencies', 'setupJdks', 'setupKotlinPlugin') + String[] args = ['setupJdks', 'setupKotlinPlugin'] + if (options.jdksTargetDir != null) args += "-D$BuildOptions.JDKS_TARGET_DIR_OPTION=$options.jdksTargetDir".toString() + gradle.run('Setting up compilation dependencies', args) } } diff --git a/platform/build-scripts/groovy/org/jetbrains/intellij/build/impl/CompilationTasksImpl.groovy b/platform/build-scripts/groovy/org/jetbrains/intellij/build/impl/CompilationTasksImpl.groovy index a142c8d3ffd7..cafc555ef076 100644 --- a/platform/build-scripts/groovy/org/jetbrains/intellij/build/impl/CompilationTasksImpl.groovy +++ b/platform/build-scripts/groovy/org/jetbrains/intellij/build/impl/CompilationTasksImpl.groovy @@ -47,7 +47,7 @@ class CompilationTasksImpl extends CompilationTasks { return } - CompilationContextImpl.setupCompilationDependencies(context.gradle) + CompilationContextImpl.setupCompilationDependencies(context.gradle, context.options) context.messages.progress("Compiling project") JpsCompilationRunner runner = new JpsCompilationRunner(context) diff --git a/platform/build-scripts/groovy/org/jetbrains/intellij/build/impl/JdkUtils.groovy b/platform/build-scripts/groovy/org/jetbrains/intellij/build/impl/JdkUtils.groovy index 4a0e1b66cc1d..8677c2520b54 100644 --- a/platform/build-scripts/groovy/org/jetbrains/intellij/build/impl/JdkUtils.groovy +++ b/platform/build-scripts/groovy/org/jetbrains/intellij/build/impl/JdkUtils.groovy @@ -23,7 +23,7 @@ class JdkUtils { } } - static String computeJdkHome(BuildMessages messages, String propertyName, String defaultDir, String envVarName, boolean requireJdk8 = true) { + static String computeJdkHome(BuildMessages messages, String propertyName, String defaultDir, String envVarName) { String jdkDir = System.getProperty(propertyName) if (jdkDir != null) { return jdkDir @@ -42,13 +42,8 @@ class JdkUtils { jdkDir = getCurrentJdk() def jdkInfo = JdkVersionDetector.instance.detectJdkVersionInfo(jdkDir) if (propertyName.contains("8") && !jdkInfo.version.contains("1.8.")) { - def msg = "JDK 1.8 is required to compile the project, but '$propertyName' property and '$envVarName' environment variable" + - " aren't defined and default JDK $jdkDir ($jdkInfo) cannot be used as JDK 1.8" - if (requireJdk8) { - messages.error(msg) - return null - } - messages.warning(msg) + messages.error("JDK 1.8 is required to compile the project, but '$propertyName' property and '$envVarName' environment variable" + + " aren't defined and default JDK $jdkDir ($jdkInfo) cannot be used as JDK 1.8") } messages.info("'$envVarName' isn't defined and '$defaultDir' doesn't exist, $propertyName set to $jdkDir") }