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",