gradle публикует банки с разными классификаторами, зависимость отсутствует

Новый плагин maven-publish для Gradle:

Для нескольких банок с разными классификаторами, например,

исходные наборы

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.

Gradle:

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

Только один помп без каких-либо зависимостей.

Теперь разделите их разными идентификаторами артефактов.

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

Каждой банке соответствует свой 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. сгенерированные файлы POM.xml для foo и bar не имеют зависимости.

person Sunnyday    schedule 27.02.2018    source источник
comment
Вам удалось это решить?   -  person Denis Itskovich    schedule 29.08.2018


Ответы (1)


Вот альтернативный подход, который мне подходит. Что-то подобное может сработать для вас:

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')
        }
    }
}
person Dr. Java    schedule 22.01.2020