Gradle, SpringBoot, MavenPubli sh - публикация содержит только зависимости и / или ограничения без версии - PullRequest
1 голос
/ 29 апреля 2020

Я использую плагин maven-publi sh в Gradle для публикации sh моего приложения Spring Boot. Я запускаю обычное задание: ./gradlew artifactorypublish. Однако появилась следующая ошибка, в которой я понял значение:

> Task :assembleArtifact
> Task :application-jar:compileJava UP-TO-DATE
> Task :application-jar:processResources UP-TO-DATE
> Task :application-jar:classes UP-TO-DATE
> Task :application-jar:jar SKIPPED
> Task :generateMetadataFileForMavenJavaPublication FAILED

FAILURE: Build failed with an exception.

* What went wrong:
Execution failed for task ':generateMetadataFileForMavenJavaPublication'.
> Invalid publication 'mavenJava':
    - Publication only contains dependencies and/or constraints without a version. You need to add minimal version information, publish resolved versions (https://docs.gradle.org/6.1/userguide/publishing_maven.html#publishing_maven:resolved_dependencies) or reference a platform (https://docs.gradle.org/6.1/userguide/platforms.html)

Мой build.gradle:

plugins {
    id 'org.springframework.boot' version '2.2.6.RELEASE'
    id 'io.spring.dependency-management' version '1.0.9.RELEASE'
    id 'java'
    id 'maven-publish'
}

dependencies {
    implementation 'org.springframework.boot:spring-boot-starter-web'
    compileOnly 'org.projectlombok:lombok'
    annotationProcessor 'org.projectlombok:lombok'
    testImplementation('org.springframework.boot:spring-boot-starter-test') {
        exclude group: 'org.junit.vintage', module: 'junit-vintage-engine'
    }
}

publishing {
    publications {
        mavenJava(MavenPublication){
            components.java
        }
    }
}

...

Версии:
Gradle 6.1
Spring Boot 2.2.6 (в основном генерируется из Spring Boot Initializr)

1 Ответ

1 голос
/ 29 апреля 2020

Поработав некоторое время, я нашел решение:

publishing {
    publications {
        mavenJava(MavenPublication){
            // bootJar is the default build task configured by Spring Boot
            artifact bootJar
        }
    }
}

Подробное объяснение

Это потому, что components.java настроен по умолчанию java Задание плагина: jar или war. Однако для Spring Boot после применения плагина org.springframework.boot заданием по умолчанию становится bootJar или bootWar.

(для справки). Из Spring Boot выполните c:

Исполняемые файлы могут быть созданы с помощью задачи bootJar. Задача автоматически создается при применении плагина java и является экземпляром BootJar. Задача assemble автоматически настраивается в зависимости от задачи bootJar, поэтому при запуске assemble (или build) также будет запускаться задача bootJar.

Следовательно, артефакт может не быть правильно идентифицировано components.java. Вместо этого следует указать bootJar или bootWar.

Ссылка: https://docs.spring.io/spring-boot/docs/current/gradle-plugin/reference/html/#publishing -your-application-maven-publi sh

...