【问题标题】:Spring Boot 2.5.0 generates plain.jar file. Can I remove it?Spring Boot 2.5.0 生成 plain.jar 文件。我可以删除它吗?
【发布时间】:2021-08-12 06:23:41
【问题描述】:

在 Spring Boot 2.5.0 更新后,它会生成 myprogram-0.0.1-plain.jar 文件以及通常的 myprogram-0.0.1.jar。我可以禁止 gradle 生成*.plain.jar 文件吗?我使用 Gradle 7.0.2。

我得到了什么:

build/
  libs/
    myprogram-0.0.1.jar
    myprogram-0.0.1-plain.jar

我想要什么:

build/
  libs/
    myprogram-0.0.1.jar

build.gradle:

plugins {
    id 'org.springframework.boot' version '2.5.0'
    id 'io.spring.dependency-management' version '1.0.11.RELEASE'
    id 'java'
}

group = 'com.example'
version = '0.0.1-SNAPSHOT'
sourceCompatibility = '11'

repositories {
    mavenCentral()
}

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

test {
    useJUnitPlatform()
}

【问题讨论】:

  • 阅读the spring boot documentation会有所帮助:如果不需要,可以禁用它。
  • @ThomasKläger 是的,谢谢。我没想到会发生这种重大变化。 CI 服务器只希望库中有一个文件。
  • 参考answer

标签: java spring spring-boot kotlin gradle


【解决方案1】:

这是 Spring Boot 2.5.0 中的一个变化。

正如@ThomasKläger 指出的那样:您可以在build.gradle 配置中进行设置。

build.gradle

jar {
    enabled = false
}

对于 Kotlin 开发人员:

tasks.getByName<Jar>("jar") {
    enabled = false
}

或者,您可以运行bootJar 任务。它只生成默认的可运行 jar。

【讨论】:

  • 感谢 Kotlin 示例。 tasks.jar { enabled = false } 为我工作;不知道有没有区别。
  • 使用 jar {enabled = false } 它根本不会生成 jar(不仅是 plain 后缀)。这怎么可能是一个公认的答案?
  • @srzhio 奇怪的是,这只会禁用 .plain jar,而不是完整的 jar。 docs.spring.io/spring-boot/docs/current/gradle-plugin/reference/…
  • @Innokenty,是的,这就是文档状态,但只有 bootJar.enabled = true; jar.enabled = false 为我工作
【解决方案2】:

尝试使用以下设置:

jar {
   enabled = true
   archiveClassifier = '' //use empty string
}

因为 org.springframework.boot.gradle.plugin.JavaPluginAction.java

        private void classifyJarTask(Project project) {
    project.getTasks().named(JavaPlugin.JAR_TASK_NAME, Jar.class)
            .configure((task) -> task.getArchiveClassifier().convention("plain"));
}

来自 spring-boot-gradle-plugin 源文件: https://repo1.maven.org/maven2/org/springframework/boot/spring-boot-gradle-plugin/2.5.0/spring-boot-gradle-plugin-2.5.0-sources.jar

见:
https://docs.gradle.org/current/dsl/org.gradle.api.tasks.bundling.Jar.html#org.gradle.api.tasks.bundling.Jar:archiveClassifier

【讨论】:

  • 我需要这个,因为我有跨其他项目的共享库,我也在那里使用 spring boot 插件。所以我不能将 bootJar 设置为 false。
【解决方案3】:

此 gradle 配置将生成 myprogram-0.0.1.jar 而不是 myprogram-0.0.1-plain.jar

在你的build.gradle.kts

// Build executable jar
tasks.jar {
    enabled = true
    // Remove `plain` postfix from jar file name
    archiveClassifier.set("")
}

【讨论】:

  • @Ocase 你救了我在这里......哇......刚刚迁移了一个带有自动 docker 构建的整个应用程序以使用 jars (UnmazedBoot),我没想到有 2 个 jars LOL
  • 使用它后,我没有清单:( 没有主要清单属性,在 build/libs/microadmin-service-1.0.0-RELEASE.jar... 所以,我绕过的解决方案这是运行"gradle bootJar"
【解决方案4】:

您可以使用bootJar,而不是使用build gradle 任务。那只会构建可启动的 jar。

请记住,bootJar 在构建之前不会运行您的测试。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-08-06
    • 1970-01-01
    • 2013-08-04
    • 1970-01-01
    • 2021-10-05
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多