Spring Boot 2.5.0生成了一个plain.jar文件。我可以删除它吗?

8 浏览
0 Comments

Spring Boot 2.5.0生成了一个plain.jar文件。我可以删除它吗?

在 Spring Boot 2.5.0 更新后,除了常规的 myprogram-0.0.1.jar 文件外,它还生成了 myprogram-0.0.1-plain.jar 文件。我能否禁止 Gradle 生成 *.plain.jar 文件?我使用的是 Gradle 7.0.2。

我想要的结果是:

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()
}

0
0 Comments

问题出现的原因:

在使用Spring Boot 2.5.0版本时,生成的jar文件名会带有"-plain"后缀,例如"myprogram-0.0.1-plain.jar",而有些开发者希望生成的jar文件名不带有"-plain"后缀,例如"myprogram-0.0.1.jar"。

解决方法:

在build.gradle.kts文件中进行配置,将生成的jar文件名的后缀设置为空字符串,即去掉"-plain"后缀。具体配置如下:

// Build executable jar

tasks.jar {

enabled = true

// Remove `plain` postfix from jar file name

archiveClassifier.set("")

}

配置完成后,重新运行构建命令即可生成不带有"-plain"后缀的jar文件。

Spring Boot 2.5.0生成的jar文件名带有"-plain"后缀,可以通过配置去掉这个后缀。具体配置方法如下:

在build.gradle.kts文件中,将生成的jar文件名的后缀设置为空字符串,即去掉"-plain"后缀。配置代码如下:

// Build executable jar

tasks.jar {

enabled = true

// Remove `plain` postfix from jar file name

archiveClassifier.set("")

}

配置完成后,重新运行构建命令即可生成不带有"-plain"后缀的jar文件。

该配置方法解决了一个开发者在使用Spring Boot 2.5.0版本时遇到的问题。开发者在迁移整个应用程序并使用自动化Docker构建时,生成了两个带有不同后缀的jar文件,导致问题。通过上述配置,开发者成功解决了这个问题。

除了上述问题,还有其他开发者在使用Spring Boot 2版本时遇到的相关问题。例如,在使用上述配置后,有开发者遇到了"no main manifest attribute"的错误提示,这时可以通过运行"gradle bootJar"命令来解决。另外,还有开发者在运行"docker build"命令时遇到了"the destination must be a directory and end with a /"的错误提示,这是在升级到Spring Boot 2版本后出现的问题。

,通过配置build.gradle.kts文件,开发者可以解决Spring Boot 2.5.0生成带有"-plain"后缀的jar文件的问题,并解决相关的错误提示。这样可以更好地满足开发者对于生成jar文件名的要求,提高开发效率。

0
0 Comments

Spring Boot 2.5.0生成了一个`plain.jar`文件,有人想知道是否可以删除它。在解决这个问题之前,我们先了解一下问题的原因。

问题的原因是在`build.gradle`文件中,`jar`任务被启用了。具体的设置如下:

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

这个设置会生成一个`plain.jar`文件。在`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"));
}

这段代码会将`jar`任务的`archiveClassifier`属性设置为"plain"。这就是为什么会生成`plain.jar`文件的原因。

要解决这个问题,可以尝试将上述设置中的`enabled`属性设置为`false`,即禁用`jar`任务。这样就不会生成`plain.jar`文件了。具体的设置如下:

jar {
   enabled = false
}

另外,还可以通过修改`build.gradle.kts`文件中的设置来改变生成的文件名。例如,下面的设置会将`war`文件的名称从`demo-0.0.1-SNAPSHOT-plain.war`改为`demo.war`:

war {

archiveClassifier.set("")

}

总结一下,要解决Spring Boot 2.5.0生成`plain.jar`文件的问题,可以尝试禁用`jar`任务或修改`build.gradle.kts`文件中的设置。通过禁用`jar`任务,可以阻止生成`plain.jar`文件;通过修改`archiveClassifier`属性,可以改变生成的文件名。希望这些解决方法对你有帮助!

0
0 Comments

从Spring Boot 2.5.0开始,出现了一个变化。用户可以在build.gradle配置文件中进行设置。对于Java开发者,可以使用以下代码:

jar {
    enabled = false
}

对于Kotlin开发者,可以使用以下代码:

tasks.getByName("jar") {

enabled = false

}

另外一种方法是运行`bootJar`任务,它只会生成默认的可运行jar文件。

感谢提供Kotlin示例,`tasks.jar { enabled = false }`对我有用;不确定是否有区别。

使用`jar { enabled = false }`将不会生成任何jar文件(不仅仅是`plain`后缀的jar文件)。这怎么能成为一个被接受的答案呢?

奇怪的是,这只禁用了`.plain`后缀的jar文件,而不是完整的jar文件。[文档](https://docs.spring.io/spring-boot/docs/current/gradle-plugin/reference/htmlsingle/#packaging-executable.and-plain-archives)中的说明也是如此。

是的,文档中是这样说明的,但是只有`bootJar.enabled = true; jar.enabled = false`对我起作用。

我刚刚用Spring Boot 2.6.5从start.spring.io创建了一个全新的项目,并添加了`jar.enabled = false`,我可以确认在运行`./gradlew build`时仍然会生成boot jar文件。`bootJar.enabled = true`部分是不必要的。

0