gradle - Gradle Maven使用kotlin-dsl发布Pom

标签 gradle kotlin gradle-kotlin-dsl

我有一个发布到Maven的多平台kotlin库项目,并且已经更新到kotlin 1.3多平台模型和kotlin-dsl

先前的groovy gradle脚本有一个ModifyPom块,我发现了一个example here。但是,一旦我添加

val modifyPom : Closure<*> by ext

modifyPom(closureOf<MavenPom> {
   // pom code in here
})

无论pom数据中有什么内容,我都会得到相同的结果,这是对ModifyPom groovy闭包的调用破坏了构建,产生了非常模糊的错误:
Build file '<path>\build.gradle.kts' line: 47
Open File

换句话说,modifyPom groovy Closure调用的行号,但与实际错误无关。

我正在使用Gradle 5.0。任何帮助表示赞赏。

最佳答案

所以-在Groovy中,我有这个块来配置POM,它工作得很好:

    project.publishing.publications.forEach { publication ->
        publication.pom.withXml {
            def root = asNode()
            root.appendNode("name", "libui")
            root.appendNode("description", "Kotlin/Native interop to libui: a portable GUI library")
            root.appendNode("url", POM_SCM_URL)
            root.children().last() + {
                licenses {
                    license {
                        name "MIT License"
                        url POM_SCM_URL
                        distribution "repo"
                    }
                }
                developers {
                    developer {
                        id "msink"
                        name "Mike Sinkovsky"
                        email "msink@permonline.ru"
                    }
                }
                scm {
                    url POM_SCM_URL
                    connection POM_SCM_CONNECTION
                    developerConnection POM_SCM_DEV_CONNECTION
                }
            }
        }
    }

以及如何将其转换为Kotlin DSL?

编辑:
好吧,用https://github.com/JetBrains/kotlin-native/issues/2372回答
在Gradle Kotlin DSL中,它变为:
project.publishing.publications.withType(MavenPublication::class.java).forEach { publication ->
    with(publication.pom) {
        withXml {
            val root = asNode()
            root.appendNode("name", "libui")
            root.appendNode("description", "Kotlin/Native interop to libui: a portable GUI library")
            root.appendNode("url", POM_SCM_URL)
        }

        licenses {
            license {
                name.set("MIT License")
                url.set(POM_SCM_URL)
                distribution.set("repo")
            }
        }
        developers {
            developer {
                id.set("msink")
                name.set("Mike Sinkovsky")
                email.set("msink@permonline.ru")
            }
        }
        scm {
            url.set(POM_SCM_URL)
            connection.set(POM_SCM_CONNECTION)
            developerConnection.set(POM_SCM_DEV_CONNECTION)
        }
    }
}

关于gradle - Gradle Maven使用kotlin-dsl发布Pom,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54165652/

相关文章:

android - 使用 Robolectric 测试 PopUpMenu

java - 在JVM中长时间记录音频时出现突然的延迟

错误: "You must set the property ' aspectjVersion' before applying the aspectj plugin"when using kotlin DSL

gradle - 如何使用 kotlinscript DSL (build.gradle.kts) 通过 url 添加 maven 存储库

groovy - 应用程序代码中的gradle build属性

groovy - 在gradle中获取任务的项目名称

android - 应用程序android中的库依赖类使用

android - 如何在 gradle kts 中排除(忽略)android 构建变体

android - 为什么渐进式依赖依赖关系不好?

Gradle 无法运行 checkstyle