编译seata源码遇到的Non-resolvable import POM

本文记录了在IDEA中导入Seata项目遇到的模块下载失败和编译错误问题,详细描述了解决过程,包括调整Maven版本和执行特定命令以成功编译。
  • idea导入seata后,发现有一个模块seata-serializer-protobuf,有些包一直下不下来,编译它一直报错:
"C:\Program Files\Java\jdk1.8.0_172\bin\java.exe" -Dmaven.multiModuleProjectDirectory=E:\workspace\seata -Dmaven.home=D:\apache-maven-3.5.3 -Dclassworlds.conf=D:\apache-maven-3.5.3\bin\m2.conf "-Dmaven.ext.class.path=C:\Program Files\JetBrains\IntelliJ IDEA 2020.1.1\plugins\maven\lib\maven-event-listener.jar" "-javaagent:C:\Program Files\JetBrains\IntelliJ IDEA 2020.1.1\lib\idea_rt.jar=50746:C:\Program Files\JetBrains\IntelliJ IDEA 2020.1.1\bin" -Dfile.encoding=UTF-8 -classpath D:\apache-maven-3.5.3\boot\plexus-classworlds-2.5.2.jar org.codehaus.classworlds.Launcher -Didea.version2020.1.1 -s D:\apache-maven-3.5.3\conf\settings.xml -Dmaven.repo.local=D:\maven-repository compile
[INFO] Scanning for projects...
[ERROR] [ERROR] Some problems were encountered while processing the POMs:
[ERROR] Non-resolvable import POM: Could not find artifact io.seata:seata-bom:pom:1.3.0-SNAPSHOT @ io.seata:seata-parent:${revision}, E:\workspace\seata\pom.xml, line 170, column 25
 @ 
[ERROR] The build could not read 1 project -> [Help 1]
[ERROR]   
[ERROR]   The project io.seata:seata-serializer:1.3.0-SNAPSHOT (E:\workspace\seata\serializer\pom.xml) has 1 error
[ERROR]     Non-resolvable import POM: Could not find artifact io.seata:seata-bom:pom:1.3.0-SNAPSHOT @ io.seata:seata-parent:${revision}, E:\workspace\seata\pom.xml, line 170, column 25 -> [Help 2]
[ERROR] 
  • 父工程的pom文件里面有一行在报错,打开pom.文件,发现是依赖的一个pom工程,这个pom工程又能直接编译通过
  • 直接在工程目录下面执行:
mvn clean install
[ERROR] Failed to execute goal org.apache.maven.plugins:maven-enforcer-plugin:3.0.0-M3:enforce (enforce-maven) on project seata-parent:
 Some Enforcer rules have failed. Look above for specific messages explaining why the rule failed. -> [Help 1]
  • 看不懂是啥意思,只好根据提示加上-e -X打印出更完整的报错信息:
[WARNING] Rule 0: org.apache.maven.plugins.enforcer.RequireMavenVersion failed with message:
Detected Maven Version: 3.5.3 is not in the allowed range [3.6.0,).
[INFO] ------------------------------------------------------------------------
[INFO] Reactor Summary:
[INFO]
[INFO] Seata Parent POM 1.3.0-SNAPSHOT 1.3.0-SNAPSHOT ..... FAILURE [  1.746 s]
  • 原来时候maven版本太低导致的。
maven执行install时出错[ERROR] [ERROR] Some problems were encountered while processing the POMs: [FATAL] Non-resolvable parent POM for com.jzo2o:jzo2o-seata:1.0-SNAPSHOT: Could not find artifact com.jzo2o:jzo2o-parent:pom:1.0-SNAPSHOT and 'parent.relativePath' points at wrong local POM @ line 6, column 13 [WARNING] 'dependencyManagement.dependencies.dependency.(groupId:artifactId:type:classifier)' must be unique: com.alibaba.cloud:spring-cloud-starter-alibaba-sentinel:jar -> duplicate declaration of version ${spring-cloud-alibaba.version} @ com.jzo2o:jzo2o-parent:1.0-SNAPSHOT, E:\BaiduNetdiskDownload\jzo2o\jzo2o-framework\jzo2o-parent\pom.xml, line 279, column 25 [WARNING] 'version' contains an expression but should be a constant. @ com.jzo2o:jzo2o-knife4j-web:${project.parent.version}, E:\BaiduNetdiskDownload\jzo2o\jzo2o-framework\jzo2o-knife4j-web\pom.xml, line 14, column 14 [WARNING] 'dependencyManagement.dependencies.dependency.(groupId:artifactId:type:classifier)' must be unique: com.alibaba.cloud:spring-cloud-starter-alibaba-sentinel:jar -> duplicate declaration of version ${spring-cloud-alibaba.version} @ line 279, column 25 @ [ERROR] The build could not read 1 project -> [Help 1] [ERROR] [ERROR] The project com.jzo2o:jzo2o-seata:1.0-SNAPSHOT (E:\BaiduNetdiskDownload\jzo2o\jzo2o-framework\jzo2o-seata\pom.xml) has 1 error [ERROR] Non-resolvable parent POM for com.jzo2o:jzo2o-seata:1.0-SNAPSHOT: Could not find artifact com.jzo2o:jzo2o-parent:pom:1.0-SNAPSHOT and 'parent.relativePath' points at wrong local POM @ line 6, column 13 -> [Help 2] [ERROR] [ERROR] To see the full stack trace of the errors, re-run Maven with the -e switch. [ERROR] Re-run Maven using the -X switch to enable full debug logging. [ERROR] [ERROR] For more information about the errors and possible solutions, please read the following articles: [ERROR] [Help 1] http://cwiki.apache.org/confluence/display/MAVEN/ProjectBuildingException [ERROR] [Help 2] http://cwiki.apache.org/confluence/d
03-24
<think>好的,我现在需要帮助用户解决Maven构建过程中遇到的POM文件问题。用户提到了三个主要问题:找不到父POM、依赖重复声明以及版本表达式错误。我需要逐一分析每个问题的原因,并提供相应的解决方案。 首先,针对“Non-resolvable parent POM”错误,根据用户提供的引用内容[^1][^3],这通常是因为Maven无法找到父项目的POM文件。可能的原因包括父项目未正确安装到本地仓库或远程仓库配置错误。需要检查父项目的安装情况,确保执行过mvn install,并且仓库配置正确,比如mirror设置是否正确,网络连接是否正常。另外,用户提到的引用[^4]中提到了配置镜像和本地仓库,可能需要检查这些配置是否有误。 接下来是依赖重复声明的问题。用户提到spring-cloud-starter-alibaba-sentinel被重复声明。这可能是在不同的地方(如父POM和子模块)都声明了同一个依赖,导致版本冲突。需要检查所有相关POM文件,使用<dependencyManagement>统一管理依赖版本,避免重复声明。 然后是版本表达式错误,比如project.parent.version的问题。这通常发生在子模块中引用父POM版本时,如果父POM的版本没有正确设置,或者子模块中未正确继承父POM,就会导致表达式无法解析。需要确保父POM的<version>正确,并且子模块中的<parent>部分正确指向父POM的groupId、artifactId和version。 现在需要将这些分析整理成步骤,并参考用户提供的引用内容来支持解决方案。例如,引用[^4]中的mirror配置可能影响远程仓库的访问,需要检查是否正确配置了阿里云镜像,避免网络问题导致无法下载父POM。同时,引用[^3]中的错误提示提到父POM未找到,可能需要手动安装父项目或检查relativePath的设置。 还需要考虑用户可能不熟悉Maven的多模块项目结构,因此在解决方案中需要详细说明如何检查父项目安装,如何配置依赖管理,以及如何正确使用版本表达式。同时,提供具体的配置示例和命令行操作步骤,帮助用户一步步解决问题。 最后,生成相关问题,帮助用户进一步理解和排查可能遇到的类似问题,比如如何配置Maven仓库、依赖冲突解决方法等。</think>针对Maven项目构建中遇到的POM文件问题,以下是分步骤解决方案: ### 一、父POM不可解析问题(Non-resolvable parent POM) 1. **确认父项目安装状态** 在父级项目目录执行`mvn clean install`,将父POM安装到本地仓库。子模块需保持与父POM的$groupId$、$artifactId$、$version$完全一致 2. **检查仓库配置** 验证`settings.xml`中的阿里云镜像配置有效性,示例配置参考: ```xml <mirror> <id>aliyunmaven</id> <mirrorOf>central</mirrorOf> <name>阿里云公共仓库</name> <url>https://maven.aliyun.com/repository/public</url> </mirror> ``` 网络问题可能导致依赖下载失败[^2] 3. **调整relativePath设置** 在子模块的`<parent>`节点添加明确的相对路径: ```xml <parent> <groupId>com.jzo2o</groupId> <artifactId>jzo2o-parent</artifactId> <version>1.0-SNAPSHOT</version> <relativePath>../parent-pom/pom.xml</relativePath> <!-- 指定父POM物理路径 --> </parent> ``` ### 二、依赖重复声明问题 1. **统一依赖管理** 在父POM中使用`<dependencyManagement>`集中管理版本: ```xml <dependencyManagement> <dependencies> <dependency> <groupId>com.alibaba.cloud</groupId> <artifactId>spring-cloud-starter-alibaba-sentinel</artifactId> <version>2022.0.0.0</version> </dependency> </dependencies> </dependencyManagement> ``` 2. **子模块声明简化** 子模块中仅需声明groupId和artifactId: ```xml <dependency> <groupId>com.alibaba.cloud</groupId> <artifactId>spring-cloud-starter-alibaba-sentinel</artifactId> </dependency> ``` ### 三、版本表达式错误(project.parent.version) 1. **显式声明父版本号** 在子模块的父节点中避免使用变量: ```xml <parent> <groupId>com.jzo2o</groupId> <artifactId>jzo2o-parent</artifactId> <version>1.0-SNAPSHOT</version> <!-- 使用固定版本号 --> </parent> ``` 2. **多模块项目版本继承** 在父POM中通过`<properties>`定义公共版本变量: ```xml <properties> <sentinel.version>2022.0.0.0</sentinel.version> </properties> ``` ### 四、验证解决方案 执行命令链验证修复效果: ```bash mvn clean install -U -DskipTests ``` `-U`参数强制更新快照依赖,`-DskipTests`跳过测试阶段
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值