springboot多模块打包报错,找不到xxx包,找不到xxx类

这篇博客探讨了在Spring Boot多模块项目中,ne-web模块在打包时无法找到ne-commo公共组件模块的问题。原因在于ne-commo模块包含了spring-boot-maven-plugin插件,导致二次打包,影响了其他模块的依赖。提供了三个解决方案:1) 不在ne-commo模块添加spring-boot-maven-plugin;2) 使用skip标签避免生成可执行jar;3) 使用maven-jar-plugin打包。通过这些方法,可以确保正确打包并解决模块间的依赖问题。

ne-parent是父模块

ne-commo是公共组件模块

ne-web是项目入口模块

错误:

ne-web模块打包的时候,找不到ne-commo公共组件模块的包,找不到ne-commo公共组件模块的类,

原因:

1、ne-commo不能添加spring-boot-maven-plugin插件,如果添加了spring-boot-maven-plugin,当运行maven的package打包命令时,这个SpringBoot插件会在Maven的package后进行二次打包,目的为了生成可执行jar包;

2、二次打包后其他模块引用ne-commo模块就会报错找不到xxx包,找不到xxx类错误

三种解决办法

1、如果是需要被依赖的子项目,就不要添加此插件

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

ne-commo子项目模块,只加如下插件

<build>
    <plugins>
        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-resources-plugin</artifactId>
            <configuration>
                <encoding>UTF-8</encoding>
            </configuration>
        </plugin>
    </plugins>
</build>

2、子项目如果要打包,使用spring-boot-maven-plugin插件,在configuration中加入skip标签,取消生成可执行jar

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

3、子项目如果要打包,也可以使用maven-jar-plugin打包工具

<plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-jar-plugin</artifactId>
</plugin>

 

<think>好的,用户的问题是Spring Boot项目打包成jar报错不到的解决方法。我需要先回忆一下可能的原因和对应的解决步骤。首先,主不到通常是因为打包有正确识别到主,或者打包配置有问题。 首先,检查pom.xml中的spring-boot-maven-plugin配置是否正确。这个插件负责打包Spring Boot应用,如果插件配置缺失或者版本不对,可能导致主未被正确识别。需要确认插件是否存在,并且是否指定了mainClass(虽然通常不需要手动指定,插件会自动检测)。 然后,主是否被正确注解。主应该使用@SpringBootApplication注解,并且可能位于正确的路径下。如果主不在默认的扫描路径(比如父),可能需要检查。 另外,打包命令是否正确。用户是否使用了mvn clean package,如果有其他配置可能需要清理target目录后重新打包。或者是否在IDE中使用了错误的打包方式,比如直接打普通jar而不是Spring Boot的可执行jar。 还有可能是多模块项目的问题,如果项目多模块的,需要确保主模块的pom正确,并且依赖正确。或者主被错误地放在了测试目录(src/test/java)下,打包时不会含测试代码。 另外,检查target目录下的jar,用jar tf命令查看MANIFEST.MF文件,里面的Main-Class是否正确指向主。如果这里的Main-Class不正确,说明插件配置有问题。 可能的解决步骤:1. 确认spring-boot-maven-plugin正确配置;2. 检查主注解和位置;3. 清理并重新打包;4. 检查MANIFEST.MF中的Main-Class;5. 多模块项目检查模块依赖和主模块配置。 现在需要把这些整理成用户能理解的解决方法,然后生成相关问题。 </think>Spring Boot项目打包成jar报错不到”,通常与打包配置或主识别异常有关,可按以下步骤排查解决: ### 1. 检查`spring-boot-maven-plugin`插件配置 Spring Boot项目打包依赖`spring-boot-maven-plugin`插件,若未正确配置会导致无法生成可执行jar。需在`pom.xml`中确认以下内容: ```xml <build> <plugins> <!-- 必须含此插件 --> <plugin> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-maven-plugin</artifactId> <version>3.2.0</version> <!-- 与Spring Boot版本匹配 --> <executions> <execution> <goals> <goal>repackage</goal> <!-- 关键:将普通jar重新打包为可执行jar --> </goals> </execution> </executions> </plugin> </plugins> </build> ``` 若插件缺失或`repackage`目标未配置,需补充后重新打包(`mvn clean package`)。 ### 2. 确认主注解和位置 主使用`@SpringBootApplication`注解,且默认应位于项目(如`com.example.demo`)下,确保Spring Boot自动扫描能识别。若主位置异常(如子过深),可在`pom.xml`中显式指定主: ```xml <plugin> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-maven-plugin</artifactId> <configuration> <mainClass>com.example.demo.DemoApplication</mainClass> <!-- 显式指定主全限定名 --> </configuration> </plugin> ``` ### 3. 清理缓存并重新打包 打包前执行`mvn clean`清理`target`目录,避免旧版本jar残留导致冲突。若使用IDE(如IntelliJ IDEA),可手动删除`target`目录后重新运行`package`命令。 ### 4. 检查jar的MANIFEST.MF文件 打包成功后,通过`jar tf target/xxx.jar`命令查看jar内容,重点检查`META-INF/MANIFEST.MF`文件中的`Main-Class`字段是否指向正确的主(如`com.example.demo.DemoApplication`)。若字段缺失或错误,说明插件未正确生成清单文件,需重新检查插件配置。 ### 5. 多模块项目特殊处理 若为多模块项目,需确保主模块(含主的模块)的`pom.xml`中含`spring-boot-maven-plugin`,且其他模块为普通依赖模块(无此插件)。同时,主不能放在`test`目录(`src/test/java`)下,否则打包时不会被含。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值