Maven多模块项目依赖缺失问题:无法引用common包
Maven多模块项目构建问题解决方案
问题核心原因
- 版本不一致:父POM版本为
0.0.1-SNAPSHOT,但子模块(common、image-gen、module2)手动指定1.0-SNAPSHOT,导致依赖引用版本不匹配 - common模块POM配置缺失:未正确继承父POM,也未指定打包方式,无法生成可被依赖的JAR包
- Spring Boot插件配置错误:父POM为
pom打包类型,无需配置spring-boot-maven-plugin,该插件应仅在需要生成可执行JAR的业务模块中配置 - 子模块重复配置编译版本:父POM已指定
java.version=17,子模块无需重复定义maven.compiler.source/target
具体修复步骤
1. 修正父POM(pom.xml)
移除父POM中的spring-boot-maven-plugin,改用pluginManagement统一管理插件版本:
<?xml version="1.0" encoding="UTF-8"?> <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd"> <modelVersion>4.0.0</modelVersion> <parent> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-parent</artifactId> <version>3.3.1</version> <relativePath/> <!-- lookup parent from repository --> </parent> <groupId>com.example</groupId> <artifactId>testapp</artifactId> <version>0.0.1-SNAPSHOT</version> <packaging>pom</packaging> <modules> <module>common</module> <module>image-gen</module> <module>module2</module> </modules> <name>testapp</name> <description>Demo project for Spring Boot</description> <properties> <java.version>17</java.version> </properties> <dependencies> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency> <dependency> <groupId>org.projectlombok</groupId> <artifactId>lombok</artifactId> <optional>true</optional> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-test</artifactId> <scope>test</scope> </dependency> </dependencies> <build> <pluginManagement> <plugins> <plugin> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-maven-plugin</artifactId> <version>3.3.1</version> <configuration> <excludes> <exclude> <groupId>org.projectlombok</groupId> <artifactId>lombok</artifactId> </exclude> </excludes> </configuration> </plugin> </plugins> </pluginManagement> </build> </project>
2. 修正common模块POM(common/pom.xml)
添加父POM继承,指定打包方式为jar:
<?xml version="1.0" encoding="UTF-8"?> <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://www.apache.org/xsd/maven-4.0.0.xsd"> <modelVersion>4.0.0</modelVersion> <parent> <groupId>com.example</groupId> <artifactId>testapp</artifactId> <version>0.0.1-SNAPSHOT</version> </parent> <artifactId>common</artifactId> <packaging>jar</packaging> <name>common</name> <description>Common utilities and entities</description> </project>
3. 修正image-gen和module2模块POM
移除手动指定的版本和编译配置,启用Spring Boot插件生成可执行JAR:
<?xml version="1.0" encoding="UTF-8"?> <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://www.apache.org/xsd/maven-4.0.0.xsd"> <modelVersion>4.0.0</modelVersion> <parent> <groupId>com.example</groupId> <artifactId>testapp</artifactId> <version>0.0.1-SNAPSHOT</version> </parent> <artifactId>image-gen</artifactId> <!-- 或module2 --> <packaging>jar</packaging> <dependencies> <dependency> <groupId>com.example</groupId> <artifactId>common</artifactId> <version>${project.version}</version> </dependency> </dependencies> <build> <plugins> <plugin> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-maven-plugin</artifactId> </plugin> </plugins> </build> </project>
4. 验证包结构
确保common模块代码路径与引用一致:
- common模块代码路径:
src/main/java/com/example/common/entity/ - image-gen引用路径:
import com.example.common.entity.XXX;
验证构建命令
- 构建所有模块:
./mvnw clean package
- 单独构建image-gen模块(自动构建依赖的common模块):
./mvnw clean package -pl image-gen -am
内容的提问来源于stack exchange,提问作者Muneer
相关产品推荐
相关产品推荐

