Spring Boot публикует перепакованный субмодуль jar с 1.5.6 - PullRequest
0 голосов
/ 11 февраля 2019

Мы преобразовали многомодульный проект maven в gradle, и у нас возникли проблемы с публикацией весеннего загрузочного фляги.

Установка выглядит так:

root
|- module1
|- common
|- common-test
|- module2-common
|- module2-write
|- module3-common
|- module3-write
|- module4
|- module5
|- deploy

deploy содержит перепакованный сосуд.

При публикации (используя maven-publish) артефакт имеет размер всего несколько килобайт.Очевидно, что он на самом деле не публикует банку deploy.

Deploy build.gradle.kts

import org.flywaydb.gradle.task.FlywayMigrateTask
import org.springframework.boot.gradle.repackage.RepackageTask
import org.springframework.boot.gradle.run.BootRunTask

plugins {
    kotlin("jvm")
    id("org.springframework.boot") version ("1.5.6.RELEASE")
    id("io.spring.dependency-management") version("1.0.6.RELEASE")
    id("org.flywaydb.flyway")
    java
}

tasks {
    withType<Jar> {
        baseName = project.name
        version = project.version as String
    }

    val implementation = configurations.getByName("implementation")
    configurations.create("includeAllJars") {
        this.extendsFrom(implementation)
    }
    withType<RepackageTask> {
        this.setCustomConfiguration("includeAllJars")
//        this.classifier = "exec"
    }
}

root build.gradle.kts

plugins {
    base
    java
    idea
    kotlin("jvm") version "1.2.51"
    kotlin("plugin.jpa") version ("1.2.51")
    kotlin("plugin.spring") version ("1.2.51")
    id("nebula.maven-publish") version "8.1.0"
    ...
}

allprojects {
    group = "com.company.group"

    ext {
        set("springBootVersion", "1.5.6.RELEASE")
    }
    apply {
        plugin("org.jetbrains.kotlin.jvm")
        plugin("org.jetbrains.kotlin.plugin.jpa")
        plugin("org.jetbrains.kotlin.plugin.spring")
    }
    dependencies {
        implementation(kotlin("stdlib-jdk8"))
        implementation(kotlin("reflect"))
        implementation(platform("org.springframework.boot:spring-boot-dependencies:${extra["springBootVersion"]}"))
        ...
    }
}

val sourcesJar by tasks.registering(Jar::class) {
    classifier = "sources"
    from(sourceSets["main"].allSource)
}

publishing {
    publications {
        register("maven", MavenPublication::class) {
//            from(project(":server-deploy").components["java"])
//            artifact(sourcesJar.get())
//            artifact(file("deploy/build/docker/runnable.jar"))
        }
    }
    repositories {
        ...
    }
}

Для раздела публикаций я попытался указать from(components["java"]), artifact(file("deploy/build/libs/deploy-${project.version}.jar")) ивышеуказанные варианты.Все результаты приводят к тому, что опубликованная банка составляет всего 1-3 КБ.

Я попытался переместить блок публикаций в развертывание build.gradle.kts, но это приводит к этой ошибке

* What went wrong:
Execution failed for task ':deploy:publishMavenPublicationToMavenLocal'.
> Failed to publish publication 'maven' to repository 'mavenLocal'
   > Invalid publication 'maven': POM file is invalid. Check any modifications you have made to the POM file.

Документы Spring Boot для плагина gradle donКажется, ничего не перечислять по этому поводу.

1 Ответ

0 голосов
/ 12 февраля 2019

Что касается комментария г-на Уилкинсона, он совершенно прав, что Spring Boot, по-видимому, не поддерживает Gradle 5. Решение состоит в том, чтобы не использовать platform() в одном модуле, который содержит плагин весенней загрузки, а использовать platform()где-либо еще.Это не долгосрочное решение!В нашем случае это идеально, потому что мы переходим прямо из Maven в Gradle, а затем сразу из Spring Boot 1 в Spring Boot 2.

deploy/build.gradle.kts

plugins {
    id("org.springframework.boot") version ("1.5.6.RELEASE")
    id("io.spring.dependency-management") version("1.0.6.RELEASE")
    id("nebula.maven-publish")
    java
    …
}
dependencyManagement {
    imports { mavenBom("org.springframework.boot:spring-boot-dependencies:${extra["springBootVersion"]}") }
}

через каждые build.gradle.kts кроме deploy и root

dependencies {
    implementation(platform("org.springframework.boot:spring-boot-dependencies:${extra["springBootVersion"]}"))
    …
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...