2

Gradle 新的 maven-publish 插件:

对于具有不同分类器的多个罐子,例如,

源集

src/foo/java
src/bar/java

dependencies {
    fooCompile group: 'org.slf4j', name: 'slf4j-api', version: '1.7.25'
    barCompile sourceSets.foo.output
}

要构建的罐子:

productName-1.0-foo.jar
productName-1.0-bar.jar

bar.jar 对 foo jar 具有编译依赖性。

摇篮:

publishing {
    publications {
        mavenJava(MavenPublication) {
            groupId 'com.example'
            artifactId 'productName'
            version '1.0'

            artifact fooJar {
                classifier 'foo'
            }

            artifact barJar {
                classifier 'bar'
            }
        }
    }

    publishing {
        repositories {
            maven {
                url "$buildDir/repo"
            }
        }
    }
}

已发布的存储库:

build/repo/com/example/productName/1.0/productName-1.0-foo.jar
build/repo/com/example/productName/1.0/productName-1.0-bar.jar
build/repo/com/example/productName/1.0/productName-1.0.pom

只有一个没有任何依赖关系的pom。

现在用不同的 artifactId (s) 将它们分开

publishing {
    publications {
        foo(MavenPublication) {
            groupId 'com.example'
            artifactId 'productName-foo'
            version '1.0'

            artifact fooJar {

            }
        }

        bar(MavenPublication) {
            groupId 'com.example'
            artifactId 'productName-bar'
            version '1.0'

            artifact barJar {

            }
        }
    }

    publishing {
        repositories {
            maven {
                url "$buildDir/repo"
            }
        }
    }
}

每个 jar 都有自己的 POM:

build/repo/com/example/productName-foo/1.0/productName-foo-1.0.jar
build/repo/com/example/productName-foo/1.0/productName-foo-1.0.pom

build/repo/com/example/productName-bar/1.0/productName-bar-1.0.jar
build/repo/com/example/productName-bar/1.0/productName-bar-1.0.pom

两个问题:

  1. 分类器 (foo, bar) 不在 jar 名称中的版本之后。
  2. 为 foo 和 bar 生成的 POM.xml 文件没有依赖关系。
4

1 回答 1

0

这是一种对我有用的替代方法。类似的东西可能对你有用:

task sourcesJar(type: Jar, dependsOn: classes) {
    classifier = 'sources'  
    from sourceSets.main.allSource
}
// If needed the javadoc task can be commented, comment javadoc from artifacts and publish as well.
task javadocJar(type: Jar, dependsOn: javadoc){
    classifier = 'javadoc'
    from javadoc.destinationDir
}

task testJar(type: Jar, dependsOn: testClasses) {
    from sourceSets.test.output
    appendix 'test'
}

artifacts{
    archives sourcesJar
    archives javadocJar
    archives testJar
}

publishing {
    publications {
        mavenJava(MavenPublication) {
            from components.java
            artifact sourcesJar
            artifact javadocJar
        }
        mavenTest(MavenPublication) {
            artifactId project.name + "-test"
            artifact testJar {
                appendix 'test'
            }
        }
    }
}

artifactory {
    publish {
        defaults {
            publications ('mavenJava', 'mavenTest')
        }
    }
}
于 2020-01-22T17:35:03.137 回答