Spring Boot 2.5.0生成了一个plain.jar文件。我可以删除它吗?
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() }
问题出现的原因:
在使用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文件名的要求,提高开发效率。
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`属性,可以改变生成的文件名。希望这些解决方法对你有帮助!
从Spring Boot 2.5.0开始,出现了一个变化。用户可以在build.gradle配置文件中进行设置。对于Java开发者,可以使用以下代码:
jar { enabled = false }
对于Kotlin开发者,可以使用以下代码:
tasks.getByName
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`部分是不必要的。