gpt4 book ai didi

maven - 使用 Gradle Kotlin DSL 发布 Kotlin MPP 元数据

转载 作者:行者123 更新时间:2023-12-02 13:41:24 26 4
gpt4 key购买 nike

我创建了一个 Kotlin MPP 在 JVM 和 JS 之间共享 Json 实用程序。所有代码都位于公共(public)源集中,我已经配置了必要的目标及其各自的依赖项。如果没有进一步的配置,我可以使用来自 JVM 和 JS 的实用程序,但不能来自另一个 MPP 的公共(public)源集,这与 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()
}
}
但是,这感觉还不太对劲。
  • 官方文档中没有这样的代码片段。
  • 该文档宣传来自公共(public)源集的单个依赖项应该足以自动解决特定于目标的依赖项:https://kotlinlang.org/docs/reference/building-mpp-with-gradle.html#metadata-publishing .我必须分别为每个目标添加依赖项才能使其正常工作。
  • this as MavenPublication是必要的,因为 Publication没有字段 artifactId .
  • 我用 project.name而不是 libraryName .

  • 这甚至是远程做事的正确方法,还是我错过了一些其他选项,这会使整个过程变得微不足道?
    现在我正在使用 Kotlin 1.3.72和 Gradle 5.2.1enableFeaturePreview("GRADLE_METADATA")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这不应该是必要的:

    In earlier Gradle versions starting from 5.3, the module metadata isused during dependency resolution, but publications don't include anymodule metadata by default. To enable module metadata publishing, addenableFeaturePreview("GRADLE_METADATA") to the root project'ssettings.gradle file.


    奇怪的是,它仅在发布项目和消费项目都启用了元数据时才有效,即使两者都使用最新的 Gradle 版本。

    关于maven - 使用 Gradle Kotlin DSL 发布 Kotlin MPP 元数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63176482/

    26 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com