From ea1abb0680b3edb7e4e57f8389c10ab6d186955c Mon Sep 17 00:00:00 2001 From: Ilya Matveev Date: Mon, 17 Sep 2018 11:04:55 +0300 Subject: [PATCH] Provide a DSL for publication settings (#1869) * Provide a DSL for publication settings * Rename DSL method publication -> mavenPublication * Fix gradle task input/output validation #KT-26771 fixed. --- .../kotlin/gradle/plugin/KotlinTarget.kt | 6 ++++++ .../kotlin/gradle/NewMultiplatformIT.kt | 8 ++++++++ .../new-mpp-lib-and-app/sample-lib/build.gradle | 9 +++++++++ .../plugin/mpp/KotlinMultiplatformPlugin.kt | 3 +++ .../kotlin/gradle/plugin/mpp/kotlinTargets.kt | 17 +++++++++++++++++ .../kotlin/gradle/tasks/KotlinNativeTasks.kt | 3 +-- 6 files changed, 44 insertions(+), 2 deletions(-) diff --git a/libraries/tools/kotlin-gradle-plugin-api/src/main/kotlin/org/jetbrains/kotlin/gradle/plugin/KotlinTarget.kt b/libraries/tools/kotlin-gradle-plugin-api/src/main/kotlin/org/jetbrains/kotlin/gradle/plugin/KotlinTarget.kt index 3ce3517beed..da9d0e2023d 100644 --- a/libraries/tools/kotlin-gradle-plugin-api/src/main/kotlin/org/jetbrains/kotlin/gradle/plugin/KotlinTarget.kt +++ b/libraries/tools/kotlin-gradle-plugin-api/src/main/kotlin/org/jetbrains/kotlin/gradle/plugin/KotlinTarget.kt @@ -5,12 +5,15 @@ package org.jetbrains.kotlin.gradle.plugin +import groovy.lang.Closure +import org.gradle.api.Action import org.gradle.api.Named import org.gradle.api.NamedDomainObjectContainer import org.gradle.api.Project import org.gradle.api.attributes.HasAttributes import org.gradle.api.component.SoftwareComponent import org.gradle.api.internal.component.UsageContext +import org.gradle.api.publish.maven.MavenPublication interface KotlinTargetComponent : SoftwareComponent { val target: KotlinTarget @@ -39,5 +42,8 @@ interface KotlinTarget: Named, HasAttributes { fun createUsageContexts(): Set + fun mavenPublication(action: Closure) + fun mavenPublication(action: Action) + override fun getName(): String = targetName } \ No newline at end of file diff --git a/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/kotlin/org/jetbrains/kotlin/gradle/NewMultiplatformIT.kt b/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/kotlin/org/jetbrains/kotlin/gradle/NewMultiplatformIT.kt index 0857382fcb9..7958dd60088 100644 --- a/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/kotlin/org/jetbrains/kotlin/gradle/NewMultiplatformIT.kt +++ b/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/kotlin/org/jetbrains/kotlin/gradle/NewMultiplatformIT.kt @@ -58,6 +58,14 @@ class NewMultiplatformIT : BaseGradleIT() { Assert.assertTrue("$it should exist", groupDir.resolve(it).exists()) } + listOf(jvmJarName, jsJarName, metadataJarName, wasmKlibName, nativeKlibName).forEach { + val pom = groupDir.resolve(it.replaceAfterLast('.', "pom")) + Assert.assertTrue( + "$pom should contain a name section.", + pom.readText().contains("Sample MPP library") + ) + } + val jvmJarEntries = ZipFile(groupDir.resolve(jvmJarName)).entries().asSequence().map { it.name }.toSet() Assert.assertTrue("com/example/lib/CommonKt.class" in jvmJarEntries) Assert.assertTrue("com/example/lib/MainKt.class" in jvmJarEntries) diff --git a/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/resources/testProject/new-mpp-lib-and-app/sample-lib/build.gradle b/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/resources/testProject/new-mpp-lib-and-app/sample-lib/build.gradle index f5159c8e2d4..1ea2c61505a 100644 --- a/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/resources/testProject/new-mpp-lib-and-app/sample-lib/build.gradle +++ b/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/resources/testProject/new-mpp-lib-and-app/sample-lib/build.gradle @@ -27,7 +27,16 @@ kotlin { fromPreset(presets.linuxX64, 'linux64') fromPreset(presets.mingwX64, 'mingw64') fromPreset(presets.macosX64, 'macos64') + + all { + mavenPublication { + pom.withXml { + asNode().appendNode('name', 'Sample MPP library') + } + } + } } + sourceSets { jvm6Main { dependencies { diff --git a/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/plugin/mpp/KotlinMultiplatformPlugin.kt b/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/plugin/mpp/KotlinMultiplatformPlugin.kt index 525081e0751..9368cbb63e0 100644 --- a/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/plugin/mpp/KotlinMultiplatformPlugin.kt +++ b/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/plugin/mpp/KotlinMultiplatformPlugin.kt @@ -126,6 +126,9 @@ class KotlinMultiplatformPlugin( } variant.publicationDelegate = variantPublication + (target as AbstractKotlinTarget).publicationConfigureActions.all { + it.execute(variantPublication) + } } } diff --git a/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/plugin/mpp/kotlinTargets.kt b/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/plugin/mpp/kotlinTargets.kt index 4679a32c84c..da8664a3665 100644 --- a/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/plugin/mpp/kotlinTargets.kt +++ b/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/plugin/mpp/kotlinTargets.kt @@ -4,6 +4,9 @@ */ package org.jetbrains.kotlin.gradle.plugin.mpp +import groovy.lang.Closure +import org.gradle.api.Action +import org.gradle.api.DomainObjectSet import org.gradle.api.NamedDomainObjectContainer import org.gradle.api.Project import org.gradle.api.artifacts.Dependency @@ -11,6 +14,9 @@ import org.gradle.api.attributes.Attribute import org.gradle.api.attributes.AttributeContainer import org.gradle.api.internal.component.UsageContext import org.gradle.api.plugins.JavaPlugin +import org.gradle.api.publish.maven.MavenPublication +import org.gradle.util.ConfigureUtil +import org.gradle.util.WrapUtil import org.jetbrains.kotlin.gradle.plugin.* import org.jetbrains.kotlin.gradle.utils.isGradleVersionAtLeast import org.jetbrains.kotlin.gradle.utils.lowerCamelCaseName @@ -61,6 +67,17 @@ abstract class AbstractKotlinTarget ( runtimeElementsConfigurationName ) ) else emptyList() + + @Suppress("UNCHECKED_CAST") + internal val publicationConfigureActions = + WrapUtil.toDomainObjectSet(Action::class.java) as DomainObjectSet> + + override fun mavenPublication(action: Action) { + publicationConfigureActions.add(action) + } + + override fun mavenPublication(action: Closure) = + mavenPublication(ConfigureUtil.configureUsing(action)) } internal fun KotlinTarget.disambiguateName(simpleName: String) = diff --git a/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/tasks/KotlinNativeTasks.kt b/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/tasks/KotlinNativeTasks.kt index 8d65f4f1138..c778eed386a 100644 --- a/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/tasks/KotlinNativeTasks.kt +++ b/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/tasks/KotlinNativeTasks.kt @@ -108,8 +108,7 @@ open class KotlinNativeCompile : AbstractCompile() { @InputFiles get() = compilation.compileDependencyFiles private val friendModule: FileCollection? - // It's already taken into account in libraries - @Internal get() = compilation.friendCompilation?.output + get() = compilation.friendCompilation?.output override fun getClasspath(): FileCollection = libraries override fun setClasspath(configuration: FileCollection?) {