Maven多模块项目依赖配置报错及本地仓库使用问题求助
问题:微服务项目依赖公共模块构建失败及本地仓库配置问题
问题背景
想把通用模块和类放入common模块,让所有microservices子模块能引用,尝试添加依赖后构建失败。
首次构建报错信息
[INFO] gamification ....................................... SUCCESS [ 4.178 s] [INFO] multiplication ..................................... SUCCESS [ 2.089 s] [INFO] microservices ...................................... FAILURE [ 0.069 s] [INFO] ------------------------------------------------------------------------ [INFO] BUILD FAILURE [INFO] ------------------------------------------------------------------------ [INFO] Total time: 6.694 s [INFO] Finished at: 2022-12-01T23:52:34+01:00 [INFO] ------------------------------------------------------------------------ [ERROR] Failed to execute goal on project microservices-parent: Could not resolve dependencies for project org.springframework.boot:microservices-parent:pom:0.0.1-SNAPSHOT: Could not find artifact com.microservices.book:common-parent:jar:0.0.1-SNAPSHOT
尝试本地仓库配置后的报错
查资料后尝试将构建结果存入本地仓库,执行命令:
mvn -Dmaven.repo.local=C:\Users\pengwin\.m2\repository clean install
出现新报错:
[ERROR] No plugin found for prefix '.repo.local=C' in the current project and in the plugin groups [org.apache.maven.plugins, org.codehaus.mojo] available from the repositories [local (C:\Users\pengwin\.m2\repository), central (https://repo.maven.apache.org/maven2)] -> [Help 1]
相关POM文件
microservices的pom.xml
<?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>2.7.5</version> <relativePath/> <!-- lookup parent from repository --> </parent> <artifactId>microservices-parent</artifactId> <version>0.0.1-SNAPSHOT</version> <name>microservices</name> <description>ms parent module</description> <properties> <java.version>1.8</java.version> <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> </properties> <packaging>pom</packaging> <modules> <module>gamification</module> <module>multiplication</module> </modules> <dependencies> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-test</artifactId> <scope>test</scope> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-test</artifactId> </dependency> <dependency> <groupId>org.junit.jupiter</groupId> <artifactId>junit-jupiter-api</artifactId> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-test</artifactId> </dependency> <dependency> <groupId>org.assertj</groupId> <artifactId>assertj-core</artifactId> </dependency> <dependency> <groupId>junit</groupId> <artifactId>junit</artifactId> <scope>test</scope> </dependency> <dependency> <groupId>org.mockito</groupId> <artifactId>mockito-core</artifactId> <scope>test</scope> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-data-jpa</artifactId> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-devtools</artifactId> <scope>runtime</scope> <optional>true</optional> </dependency> <dependency> <groupId>com.h2database</groupId> <artifactId>h2</artifactId> <scope>runtime</scope> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-amqp</artifactId> </dependency> </dependencies> <build> <plugins> <plugin> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-maven-plugin</artifactId> </plugin> </plugins> </build> </project>
common的pom.xml
<?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>2.7.5</version> <relativePath/> <!-- lookup parent from repository --> </parent> <groupId>com.microservices.book</groupId> <artifactId>common-parent</artifactId> <version>0.0.1-SNAPSHOT</version> <name>common</name> <description>common module</description> <properties> <java.version>1.8</java.version> <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> </properties> <packaging>pom</packaging> <modules> <module>exceptions</module> </modules> <build> <plugins> <plugin> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-maven-plugin</artifactId> </plugin> </plugins> </build> </project>
解决方案
1. 修复Maven命令参数错误
命令中-Dmaven.repo.local与路径之间不能有空格,正确命令为:
mvn -Dmaven.repo.local=C:\Users\pengwin\.m2\repository clean install
如果本地仓库就是默认的C:\Users\pengwin\.m2\repository,直接执行mvn clean install即可,无需指定参数。
2. 把common模块安装到本地仓库
进入common模块的根目录(包含其pom.xml的文件夹),执行mvn clean install,将模块发布到本地Maven仓库,供其他项目引用。
3. 修正microservices的依赖配置
由于common-parent的打包类型是pom,添加依赖时需指定type:
<dependency> <groupId>com.microservices.book</groupId> <artifactId>common-parent</artifactId> <version>0.0.1-SNAPSHOT</version> <type>pom</type> </dependency>
如果实际需要引用的是common下的exceptions子模块,直接引用子模块依赖:
<dependency> <groupId>com.microservices.book</groupId> <artifactId>exceptions</artifactId> <version>0.0.1-SNAPSHOT</version> </dependency>
4. 优化项目结构(可选)
创建顶级父POM,将common和microservices作为子模块,让Maven自动处理依赖关系,无需手动安装到本地仓库。顶级父POM示例:
<?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>2.7.5</version> </parent> <groupId>com.microservices.book</groupId> <artifactId>root-parent</artifactId> <version>0.0.1-SNAPSHOT</version> <packaging>pom</packaging> <modules> <module>common</module> <module>microservices</module> </modules> </project>
在根目录执行mvn clean install,Maven会按顺序构建所有模块,自动解决依赖问题。
内容的提问来源于stack exchange,提问作者IDK
相关产品推荐
相关产品推荐

