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.
This commit is contained in:
Ilya Matveev
2018-09-17 11:04:55 +03:00
committed by GitHub
parent 1b889c976a
commit ea1abb0680
6 changed files with 44 additions and 2 deletions
@@ -5,12 +5,15 @@
package org.jetbrains.kotlin.gradle.plugin package org.jetbrains.kotlin.gradle.plugin
import groovy.lang.Closure
import org.gradle.api.Action
import org.gradle.api.Named import org.gradle.api.Named
import org.gradle.api.NamedDomainObjectContainer import org.gradle.api.NamedDomainObjectContainer
import org.gradle.api.Project import org.gradle.api.Project
import org.gradle.api.attributes.HasAttributes import org.gradle.api.attributes.HasAttributes
import org.gradle.api.component.SoftwareComponent import org.gradle.api.component.SoftwareComponent
import org.gradle.api.internal.component.UsageContext import org.gradle.api.internal.component.UsageContext
import org.gradle.api.publish.maven.MavenPublication
interface KotlinTargetComponent : SoftwareComponent { interface KotlinTargetComponent : SoftwareComponent {
val target: KotlinTarget val target: KotlinTarget
@@ -39,5 +42,8 @@ interface KotlinTarget: Named, HasAttributes {
fun createUsageContexts(): Set<UsageContext> fun createUsageContexts(): Set<UsageContext>
fun mavenPublication(action: Closure<Unit>)
fun mavenPublication(action: Action<MavenPublication>)
override fun getName(): String = targetName override fun getName(): String = targetName
} }
@@ -58,6 +58,14 @@ class NewMultiplatformIT : BaseGradleIT() {
Assert.assertTrue("$it should exist", groupDir.resolve(it).exists()) 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("<name>Sample MPP library</name>")
)
}
val jvmJarEntries = ZipFile(groupDir.resolve(jvmJarName)).entries().asSequence().map { it.name }.toSet() 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/CommonKt.class" in jvmJarEntries)
Assert.assertTrue("com/example/lib/MainKt.class" in jvmJarEntries) Assert.assertTrue("com/example/lib/MainKt.class" in jvmJarEntries)
@@ -27,7 +27,16 @@ kotlin {
fromPreset(presets.linuxX64, 'linux64') fromPreset(presets.linuxX64, 'linux64')
fromPreset(presets.mingwX64, 'mingw64') fromPreset(presets.mingwX64, 'mingw64')
fromPreset(presets.macosX64, 'macos64') fromPreset(presets.macosX64, 'macos64')
all {
mavenPublication {
pom.withXml {
asNode().appendNode('name', 'Sample MPP library')
}
}
}
} }
sourceSets { sourceSets {
jvm6Main { jvm6Main {
dependencies { dependencies {
@@ -126,6 +126,9 @@ class KotlinMultiplatformPlugin(
} }
variant.publicationDelegate = variantPublication variant.publicationDelegate = variantPublication
(target as AbstractKotlinTarget).publicationConfigureActions.all {
it.execute(variantPublication)
}
} }
} }
@@ -4,6 +4,9 @@
*/ */
package org.jetbrains.kotlin.gradle.plugin.mpp 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.NamedDomainObjectContainer
import org.gradle.api.Project import org.gradle.api.Project
import org.gradle.api.artifacts.Dependency 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.attributes.AttributeContainer
import org.gradle.api.internal.component.UsageContext import org.gradle.api.internal.component.UsageContext
import org.gradle.api.plugins.JavaPlugin 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.plugin.*
import org.jetbrains.kotlin.gradle.utils.isGradleVersionAtLeast import org.jetbrains.kotlin.gradle.utils.isGradleVersionAtLeast
import org.jetbrains.kotlin.gradle.utils.lowerCamelCaseName import org.jetbrains.kotlin.gradle.utils.lowerCamelCaseName
@@ -61,6 +67,17 @@ abstract class AbstractKotlinTarget (
runtimeElementsConfigurationName runtimeElementsConfigurationName
) )
) else emptyList() ) else emptyList()
@Suppress("UNCHECKED_CAST")
internal val publicationConfigureActions =
WrapUtil.toDomainObjectSet(Action::class.java) as DomainObjectSet<Action<MavenPublication>>
override fun mavenPublication(action: Action<MavenPublication>) {
publicationConfigureActions.add(action)
}
override fun mavenPublication(action: Closure<Unit>) =
mavenPublication(ConfigureUtil.configureUsing(action))
} }
internal fun KotlinTarget.disambiguateName(simpleName: String) = internal fun KotlinTarget.disambiguateName(simpleName: String) =
@@ -108,8 +108,7 @@ open class KotlinNativeCompile : AbstractCompile() {
@InputFiles get() = compilation.compileDependencyFiles @InputFiles get() = compilation.compileDependencyFiles
private val friendModule: FileCollection? private val friendModule: FileCollection?
// It's already taken into account in libraries get() = compilation.friendCompilation?.output
@Internal get() = compilation.friendCompilation?.output
override fun getClasspath(): FileCollection = libraries override fun getClasspath(): FileCollection = libraries
override fun setClasspath(configuration: FileCollection?) { override fun setClasspath(configuration: FileCollection?) {