我想使用 gradle 和 maven-publish 发布具有不同名称的多个工件

Pat*_*ick 5 gradle maven maven-publish

我有一个包含常用类和那些特别用于单元测试的类的库。所以我想从同一个项目中发布两个单独的工件。我使用 maven 插件的工作解决方案如下所示:

task jarTest (type: Jar, dependsOn: testClasses) {
    from sourceSets.test.output
    archiveBaseName.set('foo-test')
    description = 'test utilities'

}
artifacts {
    archives jarTest
}
uploadArchives {
    repositories {
        mavenDeployer {
            //...

            addFilter('foo') {artifact, file ->
                artifact.name == 'foo'
            }
            addFilter('foo-test') {artifact, file ->
                artifact.name == 'foo-test'
            }
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

不幸的是,maven 插件已被弃用,并将在 Gradle 7 中删除。 maven-publish 是建议的替代品,我正在寻找替代解决方案。

我目前的尝试看起来像

publishing {
    publications {
        mavenJava(MavenPublication) {
            artifact jar
            artifact jarTest
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

存在两个同名工件的明显问题。

像这样设置名称不起作用:

artifactId = jar.archiveBaseName
Run Code Online (Sandbox Code Playgroud)

这既不是:

afterEvaluate {
   artifactId = jar.archiveBaseName
}
Run Code Online (Sandbox Code Playgroud)

可以像这样配置工件

artifact(jar) {
    classifier "src"
    extension "zip"
}
Run Code Online (Sandbox Code Playgroud)

但是关于文档的名称没有属性(https://docs.gradle.org/current/dsl/org.gradle.api.publish.maven.MavenArtifact.html)。

所以我在找…… 就像 maven 插件中的 addFilter 一样。