Execution repackage of goal org.springframework.boot:spring-boot-maven-plugin:2.4.0:repackage failed

Spring boot 执行打包操作时候,报错如下


Execution default of goal org.springframework.boot:spring-boot-maven-plugin:XXXX RELEASE:repackage failed: Unable to find main class

根源为,在我的项目场景下,

只有如图的-boot子模块生产可执行JAR包,其他几个模块是不需要可执行的,而我的根POM里,spring boot 默认帮我加入了如下build策略

<build>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
            </plugin>
        </plugins>
    </build>


解决方案比较简单,就是把这个spirng boot针对所有模块的build部分移除出来,放到你自己需要打包的那个子模块里,我这里是api-service-boot模块,其他模块不需要生产可执行的jar.
————————————————
版权声明:本文为优快云博主「@Within」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.youkuaiyun.com/qq_41264674/article/details/106539584

<think>好的,我现在需要解决用户提到的Java Spring Boot应用中出现的JarLauncher类找不到的问题,具体错误是java.lang.ClassNotFoundException: org.springframework.boot.loader.launch.JarLauncher。根据用户提供的引用资料,我需要结合这些信息来找出可能的原因和解决方案。 首先,用户提供了三个引用,分别涉及不同的类找不到的问题。引用1提到在Spring Boot 2.4.0及之后版本中,打包时会删除某些启动器和处理器,导致类找不到。引用2是关于系统路径冲突导致的问题,用户自己生成的JRE路径与原有路径冲突,删除后解决。引用3则是通过修改Maven插件配置来包含系统作用域的依赖,从而解决类找不到的问题。 针对JarLauncher的问题,JarLauncher属于Spring Boot的加载器模块,通常在打包的可执行JAR中存在。这个错误通常发生在打包后的JAR文件结构有问题,导致无法找到该类。可能的原因有几个: 1. **打包配置不正确**:可能在构建时没有正确配置Spring Boot Maven插件,导致所需的依赖或启动器没有被正确包含。引用1和引用3都涉及到打包配置的问题,特别是引用3中通过配置spring-boot-maven-plugin的includeSystemScope来包含依赖,这可能相关。 2. **依赖缺失或版本冲突**:可能项目中使用的Spring Boot版本存在问题,或者相关依赖未被正确引入。例如,引用1提到的版本问题,在2.4.0之后某些包被排除,可能需要检查依赖是否正确包含。 3. **构建过程中的问题**:比如清理不彻底,旧的构建文件残留,导致新打包的JAR不完整。这时候可能需要清理并重新构建项目。 4. **系统环境问题**:类似引用2中的路径冲突,可能存在类路径设置错误,导致JVM在运行时找不到正确的类。需要检查系统环境变量和类路径设置。 接下来,我需要根据这些可能的原因,结合用户提供的引用,给出具体的解决步骤。例如,检查Maven插件的配置,确保正确执行repackage目标,包含必要的依赖。同时,清理项目并重新构建,确保打包后的JAR结构正确。此外,检查系统环境变量是否有冲突,如JRE路径问题。 还需要考虑是否需要添加或排除某些依赖,特别是与启动器相关的模块。例如,确认spring-boot-loader是否在打包后的JAR中,或者是否存在版本不兼容的问题。可能需要检查pom.xml中的依赖项,确保没有冲突或遗漏。 最后,用户可能需要验证解决方案是否有效,例如重新打包后运行JAR,或者检查JAR文件内部结构,确认JarLauncher类是否存在。如果问题依旧,可能需要进一步调试,比如查看详细的类加载日志,或者使用工具分析JAR文件的内容。</think>### 解决`java.lang.ClassNotFoundException: JarLauncher`的步骤 #### 1. **检查`spring-boot-maven-plugin`配置** - 确保`pom.xml`中配置了`spring-boot-maven-plugin`插件,并添加`<execution>`和`<includeSystemScope>true</includeSystemScope>`参数。 这是为了解决依赖作用域导致的类缺失问题[^3]。 ```xml <plugin> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-maven-plugin</artifactId> <executions> <execution> <goals> <goal>repackage</goal> </goals> </execution> </executions> <configuration> <includeSystemScope>true</includeSystemScope> </configuration> </plugin> ``` #### 2. **清理并重新构建项目** - 执行以下命令清理旧的构建文件并重新打包: ```bash mvn clean package ``` - 若使用IDE(如IntelliJ或Eclipse),检查构建配置是否包含所有必要依赖。 #### 3. **验证打包后的JAR结构** - 使用`jar tvf your-application.jar`命令检查生成的JAR文件是否包含`JarLauncher`类: ```bash jar tvf target/your-application.jar | grep "JarLauncher" ``` - 若未找到该类,说明打包流程异常,需检查插件配置或依赖冲突。 #### 4. **检查依赖冲突或版本问题** - 确认Spring Boot版本是否兼容。例如,若使用Spring Boot 2.4.0+,某些注解处理器可能在打包时被删除[^1]。 - 在`pom.xml`中显式添加`spring-boot-loader`依赖: ```xml <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-loader</artifactId> <scope>provided</scope> </dependency> ``` #### 5. **排查系统环境变量冲突** - 检查系统环境变量(如`PATH`或`JAVA_HOME`)是否包含冗余的JRE路径,避免类加载器冲突[^2]。 - 确保使用的JDK版本与项目兼容(例如JDK 11需对应Spring Boot 2.5+)。 #### 6. **使用`MANIFEST.MF`手动指定主类** - 若上述方法无效,尝试在插件配置中显式指定主类: ```xml <configuration> <mainClass>org.springframework.boot.loader.JarLauncher</mainClass> </configuration> ``` --- ### 相关问题 1. **如何调试Spring Boot打包后的JAR文件结构?** 使用`jar tvf your-application.jar`或解压工具直接查看内部文件列表,确认依赖和启动类是否存在。 2. **Spring Boot版本升级后出现类缺失应如何解决?** 检查官方文档的版本变更说明,确认移除的模块,并在`pom.xml`中显式添加相关依赖。 3. **`mvn clean package`和`mvn package`的区别是什么?** `mvn clean package`会先清理旧的构建文件再打包,避免残留文件干扰;`mvn package`直接进行打包。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值