使用gradle同时发布jar和bootJar

问题描述 投票:0回答:1

这里是示例项目信息,使用spring boot框架。

组号:com.test
工件 ID:样本
版本:1.0.0

我想将 jar 和 bootJar 发布到我的 maven 存储库。

罐子:sample-1.0.0.jar
引导罐:sample_starter-1.0.0.jar

sample_starter-1.0.0.jar 供内部使用,用于创建在我的 linux 服务器上运行的 docker 容器,而 sample-1.0.0.jar 将作为我的断言之一存档。

但是我得到了 sample_starter-1.0.0.jar 和 sample-1.0.0-plain.jar。没有plain分类器,有没有办法制作jar版本?我尝试通过设置 classifier='' 自定义 jar 任务,但它根本不起作用。

这是我的 build.gradle 设置。

plugins {
    id 'java'
    id 'org.springframework.boot' version '2.7.5'
    id 'io.spring.dependency-management' version '1.1.0'
    id 'maven-publish'
}

repositories {
    mavenLocal()
    mavenCentral()
}

dependencies {
    implementation 'org.springframework.boot:spring-boot-starter-web'
    implementation 'org.springframework.boot:spring-boot-starter-test'
}

group='com.test'
version='1.0.0'

publishing {
    publications {
        plainJar(MavenPublication) {
            artifact jar
        }
        starterJar(MavenPublication) {
            artifact bootJar {
                artifactId = "${project.name}_starter"
            }
        }
    }
    repositories {
        maven {
            name = 'myRepo'
            url = layout.buildDirectory.dir("myRepo")
        }
    }
}

publish result

spring-boot gradle jar publish
1个回答
0
投票

这在 Spring Boot Gradle 插件文档中有记录。

plain
分类器的原因是因为常规/普通 JAR 和 Spring boot fat/uber JAR 具有相同的名称。因此,这将导致输出每个工件的任务相互覆盖或导致一般错误。根据文档删除
plain
分类器:

https://docs.spring.io/spring-boot/docs/current/gradle-plugin/reference/htmlsingle/#packaging-executable.and-plain-archives

tasks.named<BootJar>("bootJar") {
    archiveClassifier.set("boot") // or whatever classifier you want
}

tasks.named<Jar>("jar") {
    archiveClassifier.set("")
}
© www.soinside.com 2019 - 2024. All rights reserved.