You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Spring Boot bootJar任务未生成fat jar及运行报JAXBException问题求助

解决方案:Missing .original JAR & JAXBException When Running Spring Boot Fat JAR

1. 为什么没有生成带.original后缀的原JAR包?

默认情况下,Spring Boot Gradle插件的bootJar任务会先执行标准的jar任务生成原JAR,再将其重命名为xxx.jar.original,最后构建可执行的Fat JAR。如果没有生成.original文件,大概率是你的Gradle配置中禁用了标准jar任务,或者修改了bootJar与jar的关联逻辑。

检查你的build.gradle(或build.gradle.kts)中是否存在类似配置:

jar {
    enabled = false
}

如果有这行代码,注释掉它,重新执行./gradlew clean bootJar,就能看到build/libs下同时存在Fat JAR和.original后缀的原JAR了。

另外,如果你自定义了jar任务的输出路径或命名规则,也可能导致bootJar无法找到原JAR进行重命名,这种情况下需要对齐两个任务的输出配置。

2. 解决javax.xml.bind.JAXBException运行时异常

这个错误是因为Java 9及以上版本默认移除了JAXB模块,而你的项目依赖了JAXB相关功能(比如JPA的实体映射、XML处理等)。IDEA中运行正常,可能是因为IDEA默认给项目添加了JAXB的依赖,或者你在IDEA中使用的是Java 8(Java 8及以下JDK包含JAXB),但命令行环境用的是Java 9+。

解决方法是在build.gradle中显式添加JAXB相关依赖:

dependencies {
    // 针对Java 9+添加JAXB依赖
    implementation 'javax.xml.bind:jaxb-api:2.3.1'
    implementation 'com.sun.xml.bind:jaxb-core:2.3.0.1'
    implementation 'com.sun.xml.bind:jaxb-impl:2.3.3'
    implementation 'javax.activation:activation:1.1.1'
}

如果你的Spring Boot版本是2.3及以上,也可以使用Spring Boot提供的starter简化依赖:

dependencies {
    implementation 'org.springframework.boot:spring-boot-starter-data-jpa'
    // 添加JAXB starter(Spring Boot 2.3+支持)
    implementation 'org.springframework.boot:spring-boot-starter-jaxb'
}

3. 对齐IDEA与命令行的Gradle环境

IDEA构建正常但命令行失败,还要检查两者使用的Gradle版本和JDK版本是否一致:

  • 在IDEA中,打开File > Settings > Build, Execution, Deployment > Build Tools > Gradle,查看使用的Gradle版本和JDK;
  • 在命令行执行./gradlew --version和java -version,对比两者的版本是否匹配。

如果版本不一致,统一两者的环境(比如命令行切换到和IDEA相同的JDK版本),再重新构建运行。


内容的提问来源于stack exchange,提问作者Daniel Lynch

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.27 09:43:40