maven - 使用 Gradle Kotlin DSL 发布 Kotlin MPP 元数据
问题描述
我创建了一个 Kotlin MPP 在 JVM 和 JS 之间共享 Json 实用程序。所有代码都位于公共源集中,我已经配置了必要的目标及其各自的依赖项。无需进一步配置,我就可以使用来自 JVM 和 JS 的实用程序,但不能来自另一个 MPP 的公共源集,这与 Gradle 处理元数据的方式有关。
我已经找到了解决方案(取自https://medium.com/xorum-io/crafting-and-publishing-kotlin-multiplatform-library-to-bintray-cbc00a4f770)
afterEvaluate {
project.publishing.publications.all {
groupId = group
if (it.name.contains('metadata')) {
artifactId = "$libraryName"
} else {
artifactId = "$libraryName-$name"
}
}
}
我还让它与 Gradle Kotlin DSL 一起工作:
afterEvaluate {
publishing.publications.all {
this as MavenPublication
artifactId = project.name + "-$name".takeUnless { "metadata" in name }.orEmpty()
}
}
但是,这感觉还不太对劲。
官方文档中没有这样的代码片段。
该文档宣传来自公共源集的单个依赖项应该足以自动解决目标特定依赖项:https ://kotlinlang.org/docs/reference/building-mpp-with-gradle.html#metadata-publishing 。我必须分别为每个目标添加依赖项才能使其正常工作。
this as MavenPublication
是必要的,因为Publication
没有字段artifactId
。我使用
project.name
而不是libraryName
.
这甚至是远程做事的正确方法,还是我错过了一些其他选项,这会使整个过程变得微不足道?
现在我正在使用 Kotlin1.3.72
和 Gradle5.2.1
和enableFeaturePreview("GRADLE_METADATA")
in settings.gradle.kts
。我也用 Gradle 6.5.1
(最新)试过它,但它的行为完全一样。
现在我很高兴它可以正常工作,但我怀疑有一种更清洁的方法可以做到这一点。如果有更多 Gradle 专业知识的人能为我解决问题或为我指明正确的方向,我将不胜感激。
编辑:
gradle.build.kts
为了完整性。虽然这里没有太多事情发生。
group = "org.example"
version = "1.0-SNAPSHOT"
plugins {
kotlin("multiplatform") version "1.3.72"
`maven-publish`
}
repositories {
mavenCentral()
}
kotlin {
jvm()
sourceSets {
val commonMain by getting {
dependencies {
implementation(kotlin("stdlib-common"))
}
}
val jvmMain by getting {
dependencies {
implementation(kotlin("stdlib"))
}
}
}
}
解决方案
毕竟真的没有问题。解决方案是也简单地添加enableFeaturePreview("GRADLE_METADATA")
到消费项目中。
根据https://kotlinlang.org/docs/reference/building-mpp-with-gradle.html#metadata-publishing这不应该是必要的:
在从 5.3 开始的早期 Gradle 版本中,模块元数据在依赖解析期间使用,但默认情况下发布不包含任何模块元数据。要启用模块元数据发布,请将 enableFeaturePreview("GRADLE_METADATA") 添加到根项目的 settings.gradle 文件中。
奇怪的是,它仅在发布项目和消费项目都启用了元数据时才有效,即使两者都使用最新的 Gradle 版本。
推荐阅读
- python - 发出战斗命令,但健康不减
- python - Python在闰年重复日期值以进行周数转换
- amazon-web-services - Cognito 访问令牌“cognito:groups”丢失
- gatsby - 试图将 Gatsby 站点部署到 Netlify。Netlify 可以找到一些 node_modules 文件
- angular - 无法在父 component.html 中添加第二个路由器出口以在路由中显示嵌套子级
- postgresql - 使用运算符“||”进行字符串连接 或 format() 函数
- r - 如何将代码集成到闪亮的应用程序中并上传文件?
- bash - 一次循环两个数组值
- c# - 如何将 MAC 地址转换和反转为字节 C#
- r - plot.window(...) 中的错误:无效的“ylim”值