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
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<UsageContext>
fun mavenPublication(action: Closure<Unit>)
fun mavenPublication(action: Action<MavenPublication>)
override fun getName(): String = targetName
}
@@ -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("<name>Sample MPP library</name>")
)
}
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)
@@ -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 {
@@ -126,6 +126,9 @@ class KotlinMultiplatformPlugin(
}
variant.publicationDelegate = variantPublication
(target as AbstractKotlinTarget).publicationConfigureActions.all {
it.execute(variantPublication)
}
}
}
@@ -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<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) =
@@ -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?) {