From ef169aa12ba7aeb2f5caddbbd28bf875b8f182e9 Mon Sep 17 00:00:00 2001 From: Vyacheslav Gerasimov Date: Wed, 19 Feb 2020 20:06:32 +0300 Subject: [PATCH] Build: Use preprocessed tools.jar for compilation tools.jar from JDK has different public api on different platforms which makes impossible to reuse caches for tasks which depend on it. Since we can't compile against those classes & stay cross-platform anyway, we may just exclude them from compile classpath. This should make tools.jar compatible at least within one build of JDK for different platforms --- compiler/cli/build.gradle.kts | 2 +- dependencies/tools-jar-api/build.gradle.kts | 44 +++++++++++++++++++ idea/jvm-debugger/eval4j/build.gradle.kts | 4 +- .../jvm-debugger-core/build.gradle.kts | 2 +- .../jvm-debugger-evaluation/build.gradle.kts | 2 +- .../jvm-debugger-sequence/build.gradle.kts | 2 +- .../jvm-debugger-util/build.gradle.kts | 2 +- plugins/kapt3/kapt3-base/build.gradle.kts | 4 +- plugins/kapt3/kapt3-compiler/build.gradle.kts | 5 ++- settings.gradle | 1 + 10 files changed, 57 insertions(+), 11 deletions(-) create mode 100644 dependencies/tools-jar-api/build.gradle.kts diff --git a/compiler/cli/build.gradle.kts b/compiler/cli/build.gradle.kts index d3ac9770a8c..9e0dddbf576 100644 --- a/compiler/cli/build.gradle.kts +++ b/compiler/cli/build.gradle.kts @@ -30,7 +30,7 @@ dependencies { compile(project(":kotlin-util-io")) compile(project(":compiler:ir.serialization.common")) - compileOnly(toolsJar()) + compileOnly(project(":dependencies:tools-jar-api")) compileOnly(intellijCoreDep()) { includeJars("intellij-core") } compileOnly(intellijDep()) { includeIntellijCoreJarDependencies(project) } diff --git a/dependencies/tools-jar-api/build.gradle.kts b/dependencies/tools-jar-api/build.gradle.kts new file mode 100644 index 00000000000..51951889cf5 --- /dev/null +++ b/dependencies/tools-jar-api/build.gradle.kts @@ -0,0 +1,44 @@ +plugins { + base +} + +val JDK_18: String by rootProject.extra +val toolsJarFile = toolsJarFile(jdkHome = File(JDK_18)) ?: error("Couldn't find tools.jar in $JDK_18") + +// tools.jar from JDK has different public api on different platforms which makes impossible to reuse caches +// for tasks which depend on it. Since we can't compile against those classes & stay cross-platform anyway, +// we may just exclude them from compile classpath. This should make tools.jar compatible at least within +// one build of JDK for different platforms + +val jar = tasks.register("jar") { + from { + zipTree(toolsJarFile).matching { + exclude("META-INF/**") + + exclude("sun/tools/attach/LinuxAttachProvider.class") + exclude("sun/tools/attach/LinuxVirtualMachine${'$'}SocketInputStream.class") + exclude("sun/tools/attach/LinuxVirtualMachine.class") + + exclude("sun/tools/attach/BsdAttachProvider.class") + exclude("sun/tools/attach/BsdVirtualMachine${'$'}SocketInputStream.class") + exclude("sun/tools/attach/BsdVirtualMachine.class") + + exclude("sun/tools/attach/WindowsAttachProvider.class") + exclude("sun/tools/attach/WindowsVirtualMachine${'$'}SocketInputStream.class") + exclude("sun/tools/attach/WindowsVirtualMachine.class") + + // Windows only classes + exclude("com/sun/tools/jdi/SharedMemoryAttachingConnector$1.class") + exclude("com/sun/tools/jdi/SharedMemoryAttachingConnector.class") + exclude("com/sun/tools/jdi/SharedMemoryConnection.class") + exclude("com/sun/tools/jdi/SharedMemoryListeningConnector$1.class") + exclude("com/sun/tools/jdi/SharedMemoryListeningConnector.class") + exclude("com/sun/tools/jdi/SharedMemoryTransportService${'$'}SharedMemoryListenKey.class") + exclude("com/sun/tools/jdi/SharedMemoryTransportService.class") + exclude("com/sun/tools/jdi/SharedMemoryTransportServiceCapabilities.class") + exclude("com/sun/tools/jdi/SunSDK.class") + } + } +} + +artifacts.add("default", jar) diff --git a/idea/jvm-debugger/eval4j/build.gradle.kts b/idea/jvm-debugger/eval4j/build.gradle.kts index 7e96914b99d..fdd77decb3f 100644 --- a/idea/jvm-debugger/eval4j/build.gradle.kts +++ b/idea/jvm-debugger/eval4j/build.gradle.kts @@ -7,10 +7,10 @@ dependencies { compile(kotlinStdlib()) compile(project(":compiler:backend")) - compileOnly(toolsJar()) + compileOnly(project(":dependencies:tools-jar-api")) compileOnly(intellijCoreDep()) { includeJars("intellij-core", "asm-all", rootProject = rootProject) } - testCompileOnly(toolsJar()) + testCompileOnly(project(":dependencies:tools-jar-api")) testCompile(project(":kotlin-test:kotlin-test-junit")) testCompile(commonDep("junit:junit")) testCompile(intellijDep()) { includeJars("asm-all", rootProject = rootProject) } diff --git a/idea/jvm-debugger/jvm-debugger-core/build.gradle.kts b/idea/jvm-debugger/jvm-debugger-core/build.gradle.kts index 025847cdce3..ce69d4d2930 100644 --- a/idea/jvm-debugger/jvm-debugger-core/build.gradle.kts +++ b/idea/jvm-debugger/jvm-debugger-core/build.gradle.kts @@ -11,7 +11,7 @@ dependencies { compile(project(":idea:ide-common")) compile(project(":idea:jvm-debugger:jvm-debugger-util")) - compileOnly(toolsJar()) + compileOnly(project(":dependencies:tools-jar-api")) compileOnly(intellijDep()) Platform[192].orHigher { diff --git a/idea/jvm-debugger/jvm-debugger-evaluation/build.gradle.kts b/idea/jvm-debugger/jvm-debugger-evaluation/build.gradle.kts index 11276b4fd8f..9b8862d303d 100644 --- a/idea/jvm-debugger/jvm-debugger-evaluation/build.gradle.kts +++ b/idea/jvm-debugger/jvm-debugger-evaluation/build.gradle.kts @@ -10,7 +10,7 @@ dependencies { compile(project(":idea:idea-j2k")) compile(project(":idea:jvm-debugger:jvm-debugger-util")) - compileOnly(toolsJar()) + compileOnly(project(":dependencies:tools-jar-api")) Platform[192].orHigher { compileOnly(intellijPluginDep("java")) } diff --git a/idea/jvm-debugger/jvm-debugger-sequence/build.gradle.kts b/idea/jvm-debugger/jvm-debugger-sequence/build.gradle.kts index e40f00bbd00..aa5730ffba4 100644 --- a/idea/jvm-debugger/jvm-debugger-sequence/build.gradle.kts +++ b/idea/jvm-debugger/jvm-debugger-sequence/build.gradle.kts @@ -7,7 +7,7 @@ dependencies { compile(project(":compiler:backend")) compile(project(":idea:ide-common")) - compileOnly(toolsJar()) + compileOnly(project(":dependencies:tools-jar-api")) compileOnly(intellijDep()) Platform[192].orHigher { compileOnly(intellijPluginDep("java")) diff --git a/idea/jvm-debugger/jvm-debugger-util/build.gradle.kts b/idea/jvm-debugger/jvm-debugger-util/build.gradle.kts index c75661e3e85..0534d3d5c5f 100644 --- a/idea/jvm-debugger/jvm-debugger-util/build.gradle.kts +++ b/idea/jvm-debugger/jvm-debugger-util/build.gradle.kts @@ -11,7 +11,7 @@ dependencies { // TODO: get rid of this compile(project(":idea:jvm-debugger:eval4j")) - compileOnly(toolsJar()) + compileOnly(project(":dependencies:tools-jar-api")) Platform[192].orHigher { compileOnly(intellijPluginDep("java")) diff --git a/plugins/kapt3/kapt3-base/build.gradle.kts b/plugins/kapt3/kapt3-base/build.gradle.kts index 450a64ce60b..35a1578cbdb 100644 --- a/plugins/kapt3/kapt3-base/build.gradle.kts +++ b/plugins/kapt3/kapt3-base/build.gradle.kts @@ -5,10 +5,10 @@ plugins { dependencies { compile(kotlinStdlib()) - compileOnly(toolsJar()) + compileOnly(project(":dependencies:tools-jar-api")) testCompile(commonDep("junit:junit")) - testCompileOnly(toolsJar()) + testCompileOnly(project(":dependencies:tools-jar-api")) } sourceSets { diff --git a/plugins/kapt3/kapt3-compiler/build.gradle.kts b/plugins/kapt3/kapt3-compiler/build.gradle.kts index f7e7cde4a21..5434cad1588 100644 --- a/plugins/kapt3/kapt3-compiler/build.gradle.kts +++ b/plugins/kapt3/kapt3-compiler/build.gradle.kts @@ -27,7 +27,7 @@ dependencies { compile(project(":compiler:frontend.java")) compile(project(":compiler:plugin-api")) - compileOnly(toolsJar()) + compileOnly(project(":dependencies:tools-jar-api")) compileOnly(project(":kotlin-annotation-processing-cli")) compileOnly(project(":kotlin-annotation-processing-base")) compileOnly(project(":kotlin-annotation-processing-runtime")) @@ -39,7 +39,8 @@ dependencies { testCompile(projectTests(":kotlin-annotation-processing-base")) testCompile(commonDep("junit:junit")) testCompile(project(":kotlin-annotation-processing-runtime")) - testCompileOnly(toolsJar()) + + testCompileOnly(project(":dependencies:tools-jar-api")) testRuntimeOnly(toolsJar()) embedded(project(":kotlin-annotation-processing-runtime")) { isTransitive = false } diff --git a/settings.gradle b/settings.gradle index 004884d4124..5a676bb7d54 100644 --- a/settings.gradle +++ b/settings.gradle @@ -141,6 +141,7 @@ include ":kotlin-build-common", ":core:util.runtime", ":compiler:compiler.version", ":dependencies:android-sdk", + ":dependencies:tools-jar-api", ":idea:idea-jvm", ":idea:idea-maven", ":idea:idea-gradle",