From 22bbbeb1eccee946572d3aab803bcfd3a52da12c Mon Sep 17 00:00:00 2001 From: Vyacheslav Gerasimov Date: Tue, 25 Jun 2019 18:09:41 +0300 Subject: [PATCH] Build: Fix manifest for kotlin-compiler in jps build Trigger manifest generation from jar task during jps import --- ant/build.gradle.kts | 2 +- compiler/cli/cli-runner/build.gradle.kts | 4 +- gradle/jps.gradle.kts | 9 ++++- prepare/compiler/build.gradle.kts | 48 ++++++++++++------------ 4 files changed, 33 insertions(+), 30 deletions(-) diff --git a/ant/build.gradle.kts b/ant/build.gradle.kts index 4f35d7290a1..de9db4222be 100644 --- a/ant/build.gradle.kts +++ b/ant/build.gradle.kts @@ -17,5 +17,5 @@ sourceSets { } runtimeJar { - manifest.attributes.put("Class-Path", "$compilerManifestClassPath kotlin-preloader.jar") + manifest.attributes["Class-Path"] = "$compilerManifestClassPath kotlin-preloader.jar" } diff --git a/compiler/cli/cli-runner/build.gradle.kts b/compiler/cli/cli-runner/build.gradle.kts index 962ad6b4135..e5a8efca769 100644 --- a/compiler/cli/cli-runner/build.gradle.kts +++ b/compiler/cli/cli-runner/build.gradle.kts @@ -16,6 +16,6 @@ sourceSets { } runtimeJar { - manifest.attributes.put("Main-Class", "org.jetbrains.kotlin.runner.Main") - manifest.attributes.put("Class-Path", "kotlin-stdlib.jar") + manifest.attributes["Main-Class"] = "org.jetbrains.kotlin.runner.Main" + manifest.attributes["Class-Path"] = "kotlin-stdlib.jar" } diff --git a/gradle/jps.gradle.kts b/gradle/jps.gradle.kts index 1d89a0730ec..4c23ce515a7 100644 --- a/gradle/jps.gradle.kts +++ b/gradle/jps.gradle.kts @@ -1,6 +1,7 @@ @file:Suppress("UnstableApiUsage") import org.jetbrains.gradle.ext.* +import org.gradle.jvm.tasks.Jar import org.jetbrains.kotlin.ideaExt.* @@ -341,8 +342,12 @@ fun NamedDomainObjectContainer.jarFromProject(project: Project val jarName = name ?: project.name + ".jar" create(jarName) { archive(jarName) { - directory("META-INF") { - file("${project.buildDir}/tmp/jar/MANIFEST.MF") + (project.tasks["jar"] as? Jar)?.let { jar -> + val manifestPath = jar.temporaryDir.resolve("MANIFEST.MF") + jar.manifest.writeTo(manifestPath) + directory("META-INF") { + file(manifestPath) + } } if (project.sourceSets.names.contains("main")) { diff --git a/prepare/compiler/build.gradle.kts b/prepare/compiler/build.gradle.kts index 000abcf6e1e..6d48957d987 100644 --- a/prepare/compiler/build.gradle.kts +++ b/prepare/compiler/build.gradle.kts @@ -32,7 +32,6 @@ if (kotlinBuildProperties.isInJpsBuildIdeaSync) { } } -val runtimeJar by configurations.creating val compile by configurations // maven plugin writes pom compile scope from compile configuration by default val proguardLibraries by configurations.creating { extendsFrom(compile) @@ -220,15 +219,12 @@ dependencies { publish() -noDefaultJar() - val packCompiler by task { configurations = emptyList() duplicatesStrategy = DuplicatesStrategy.EXCLUDE destinationDirectory.set(File(buildDir, "libs")) + archiveClassifier.set("before-proguard") - setupPublicJar(compilerBaseName, "before-proguard") - from(fatJarContents) dependsOn(fatJarContentsStripServices) @@ -244,9 +240,6 @@ val packCompiler by task { zipTree(it).matching { exclude("META-INF/jb/**", "META-INF/LICENSE") } } } - - manifest.attributes["Class-Path"] = compilerManifestClassPath - manifest.attributes["Main-Class"] = "org.jetbrains.kotlin.cli.jvm.K2JVMCompiler" } val proguard by task { @@ -270,9 +263,29 @@ val proguard by task { } val pack = if (shrink) proguard else packCompiler - val distDir: String by rootProject.extra +val jar = runtimeJar { + dependsOn(pack) + + from { + zipTree(pack.outputs.files.singleFile) + } + + manifest.attributes["Class-Path"] = compilerManifestClassPath + manifest.attributes["Main-Class"] = "org.jetbrains.kotlin.cli.jvm.K2JVMCompiler" +} + +sourcesJar { + from { + compilerModules.map { + project(it).mainSourceSet.allSource + } + } +} + +javadocJar() + val distKotlinc = distTask("distKotlinc") { destinationDir = File("$distDir/kotlinc") @@ -287,7 +300,7 @@ val distKotlinc = distTask("distKotlinc") { } into("lib") { - from(pack) { rename { "$compilerBaseName.jar" } } + from(jar) { rename { "$compilerBaseName.jar" } } from(libraries) from(sources) from(compilerPlugins) { @@ -323,21 +336,6 @@ distTask("dist") { from(distStdlibMinimalForTests) } -runtimeJarArtifactBy(pack, pack.outputs.files.singleFile) { - name = compilerBaseName - classifier = "" -} - -sourcesJar { - from { - compilerModules.map { - project(it).mainSourceSet.allSource - } - } -} - -javadocJar() - inline fun Project.distTask( name: String, crossinline block: T.() -> Unit