idea springboot 多个模块依赖打包编译找不到包问题

问题:

1.springboot 多模块maven 父子工程,B模块依赖了A,  A打包没问题,之后打包B,报错依赖的A中的包找不到,但是idea里导入都是好的,没有报错。

2.解决:BOOT-INF 的坑

 

在多module的环境下,jar包之间相互依赖,这时候打包的时候就会有先后顺序的问题。

在项目开发后打包的时候发现通过原始建立的多module的项目会出现问题;

原始的springboot打包是spring-boot-maven-plugin来完成的;若是A包依赖B包,项目编译跑起来是没任何问题的,但是在mvn打包的时候,会发现被依赖的B包在打成jar的过程中class和resource文件则是在一个名字为BOOT-INF的文件夹之下

我的解决方法

<plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
                <configuration>
                    <mainClass>com.mz.party_build.api_server.ApiServerApplication</mainClass>
                    <fork>false</fork>
                    <includeSystemScope>true</includeSystemScope>
                    <!--<classifier>exe</classifier>-->
                    <skip>true</skip>

                </configuration>
            </plugin>

 

在被依赖的A模块pom中build 中加   

<skip>true</skip>

可以看得地方

file ----project structure ---modules--sources

可以看到打的包在boot -info下

### 问题分析 Spring Boot多模块项目在Maven打包时出现“无法解析符号”的问题,通常与依赖管理、模块依赖关系或编译顺序有关。以下从引用内容和专业知识出发,提供解决方案。 --- ### 解决方案 #### 1. 检查模块间的依赖关系 确保所有子模块的`pom.xml`文件中正确声明了模块间的依赖关系。例如,如果模块`A`依赖模块`B`,需要在模块`A`的`pom.xml`中添加如下依赖声明[^2]: ```xml <dependency> <groupId>com.example</groupId> <artifactId>module-B</artifactId> <version>1.0-SNAPSHOT</version> </dependency> ``` 此外,父项目的`pom.xml`应使用`<modules>`标签声明所有子模块,确保Maven能够正确识别和处理这些模块。 --- #### 2. 确保依赖已正确下载 根据提供的信息[^1],Maven可能未能成功下载某些依赖项。可以通过以下步骤解决: - 清理本地Maven仓库中的相关依赖,并重新安装: ```bash mvn clean install -U ``` 参数`-U`强制更新快照版本的依赖。 - 如果仍然存在问题,检查网络连接是否正常,或者尝试配置国内镜像源(如阿里云Maven镜像): ```xml <mirrors> <mirror> <id>aliyun</id> <name>Aliyun Maven</name> <url>https://maven.aliyun.com/repository/public</url> <mirrorOf>central</mirrorOf> </mirror> </mirrors> ``` --- #### 3. 配置正确的编译顺序 Maven默认按照`pom.xml`中声明的模块顺序进行编译。如果模块间存在依赖关系但未正确声明,可能导致编译失败。可以通过以下方式调整编译顺序: - 在父项目的`pom.xml`中明确声明模块的顺序: ```xml <modules> <module>module-B</module> <module>module-A</module> </modules> ``` 确保依赖关系清晰且无循环依赖。 --- #### 4. 检查IDE配置 有时IDE(如IntelliJ IDEA)的缓存可能导致编译问题。可以尝试以下操作: - 重新导入Maven项目:选择`File -> Invalidate Caches / Restart`,然后重新导入项目。 - 确保IDE的Maven配置与命令行一致,特别是Java版本和编码设置。 --- #### 5. 处理Spring Boot特定问题 如果问题与Spring Boot相关,可能是某些依赖未正确加载。参考引用[^3],建议: - 确保`pom.xml`中含必要的Spring Boot Starter依赖: ```xml <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency> ``` - 检查`application.properties`或`application.yml`文件,确保配置正确。 --- #### 6. 延迟初始化Bean 如果问题涉及Spring容器中的Bean初始化失败,可以参考引用[^5],通过添加`@Lazy`注解延迟初始化: ```java @Component @Lazy public class MyComponent { // Bean逻辑 } ``` 这有助于避免因依赖未加载导致的编译错误。 --- ### 示例代码 以下是一个简单的多模块项目结构及`pom.xml`配置示例: #### 父模块`pom.xml` ```xml <project xmlns="http://maven.apache.org/POM/4.0.0" ...> <modelVersion>4.0.0</modelVersion> <groupId>com.example</groupId> <artifactId>parent-module</artifactId> <packaging>pom</packaging> <version>1.0-SNAPSHOT</version> <modules> <module>module-A</module> <module>module-B</module> </modules> </project> ``` #### 子模块`module-A/pom.xml` ```xml <project xmlns="http://maven.apache.org/POM/4.0.0" ...> <parent> <groupId>com.example</groupId> <artifactId>parent-module</artifactId> <version>1.0-SNAPSHOT</version> </parent> <artifactId>module-A</artifactId> <dependencies> <dependency> <groupId>com.example</groupId> <artifactId>module-B</artifactId> <version>1.0-SNAPSHOT</version> </dependency> </dependencies> </project> ``` --- ###
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值