mbonnin
08/18/2023, 10:09 AMkotlinMultiplatform
publication to only include a subset of the target publications?
Use case is a Gradle plugin integration tests where I'd like to save publishing all the native targets since I'm only testing JVM + host.Adam S
08/18/2023, 10:23 AMonlyIf {}
https://docs.gradle.org/current/userguide/publishing_customization.html#sec:publishing_maven:conditional_publishing
You could skip the tasks if the module name doesn't end in -jvm
, unless it has no target suffix?mbonnin
08/18/2023, 10:25 AMmbonnin
08/18/2023, 10:25 AMmbonnin
08/18/2023, 10:26 AMmbonnin
08/18/2023, 10:26 AMAdam S
08/18/2023, 10:26 AMAdam S
08/18/2023, 10:28 AM// build.gradle.kts
tasks.matching {
"CInteropMetadataDependencyTransformationTask" in (it::class.qualifiedName ?: "")
}.configureEach {
// disable the IDE task when generating documentation
enabled = gradle.taskGraph.allTasks.none {
it is org.jetbrains.dokka.gradle.AbstractDokkaTask
}
}
mbonnin
08/18/2023, 10:29 AMAdam S
08/18/2023, 10:29 AMtasks.dokkaHtml {
// Help improve development & integration test speeds, which publish
// Dokka to MavenLocal but these tests don't require documentation.
val localPublicationPredicate = provider {
gradle.taskGraph.allTasks.any { it is PublishToMavenLocal || it is AbstractTestTask }
}
onlyIf("running tests or not publishing to MavenLocal") {
!localPublicationPredicate.get()
}
outputDirectory.set(layout.buildDirectory.dir("dokka"))
}
Adam S
08/18/2023, 10:31 AMmbonnin
08/18/2023, 11:09 AMpublishWatchosArm64PublicationToPluginTestRepository
are not skipped so I still pay the price of all the compileWatchosArm64
linkWatchosArm64
Adam S
08/18/2023, 11:19 AMmbonnin
08/18/2023, 12:58 PMpublishKotlinMultiplatformPublication
does not depend on publishWatchosArm64Publication
. I was calling publishAllPublications
which obviously runs wachosArm64
and everything 🤦♂️. Looks like my problem is as easy as calling each publish task separately and avoiding the ones I don't want. The module file will contain invalid links but I guess that's not too badmbonnin
08/18/2023, 12:58 PMmbonnin
08/18/2023, 1:29 PMtaskGraph
isn't really possible because it's not available at configuration time (from what I can see) and execution time is too late because dokka has already been configuredmbonnin
08/21/2023, 9:57 AM@Suppress("UNCHECKED_CAST")
private val KotlinTarget.kotlinComponents: Set<KotlinTargetComponent>
get() {
return this::class.java.getDeclaredMethod("getKotlinComponents").invoke(this) as Set<KotlinTargetComponent>
}
private fun KotlinTarget.createMavenPublications(publications: PublicationContainer) {
components
.map { gradleComponent -> gradleComponent to kotlinComponents.single { it.name == gradleComponent.name } }
.forEach { (gradleComponent, kotlinComponent) ->
publications.create("${kotlinComponent.name}Test", MavenPublication::class.java).apply {
from(gradleComponent)
(this as MavenPublicationInternal).publishWithOriginalFileName()
artifactId = kotlinComponent.defaultArtifactId
}
}
}