gradle maven使用kotlin-dsl发布Pom

时间:2019-01-13 02:35:04

标签: 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。任何帮助表示赞赏。

2 个答案:

答案 0 :(得分:0)

此问题已通过将modifyPom的定义更改为

得以解决。
val modifyPom : Closure<MavenPom> by ext

这已解决了最初发布的问题,现在正在修改pom。如果有人需要帮助,请添加评论,希望我会注意到

答案 1 :(得分:0)

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

var tsneOpt = tsne.tsne( tensorData, { perplexity : PERPLEXITY } );

// This is the 'compute' version
tsneOpt.compute( ITERATIONS ).then( () => {
    tsneOpt.coordsArray().then( coords => {
        console.log( 'Projection finished!' );
        coords.forEach( ( d, i ) => {
            data[ i ].x = d[ 0 ];
            data[ i ].y = d[ 1 ];
        } );
        drawProjection();
    } );
} );

// This is the iterable version
async function iterateProjection() {
    await tsneOpt.iterateKnn();
    const step = 20;
    for( let i = 0; i < ITERATIONS; i += step ) {        
        await tsneOpt.iterate( step );
        tsneOpt.coordsArray().then( coords => {
            console.log( 'Projection stepped!' );
            coords.forEach( ( d, i ) => {
                data[ i ].x = d[ 0 ];
                data[ i ].y = d[ 1 ];
            } );
            drawProjection();
        } );
    }
}

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

编辑: 好吧,在https://github.com/JetBrains/kotlin-native/issues/2372中得到了回答 在Gradle Kotlin DSL中,它变为:

    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
                }
            }
        }
    }