编译Apache Ambari 2.7.7时依赖解析失败的解决咨询
Ambari 2.7.7编译依赖解析失败解决方案
问题本质
你遇到的ambari-metrics-timelineservice、ambari-metrics-host-aggregator等构件缺失,并非远程Maven仓库没有,而是这些属于Ambari内部模块的编译产物,需要先在本地编译生成并安装到本地Maven仓库,同时官方编译流程存在小问题,需结合代码修复调整。
解决步骤
1. 清理本地Maven失败缓存
本地仓库已缓存依赖查找失败的记录,需先删除对应目录以强制重新解析:
rm -rf ~/.m2/repository/org/apache/ambari/ambari-metrics-*
2. 修复ambari-metrics-assembly模块依赖配置
打开ambari-metrics/ambari-metrics-assembly/pom.xml,修改以下内容:
- 将
ambari-metrics-timelineservice、ambari-metrics-host-aggregator、ambari-metrics-common等依赖的<scope>从compile改为provided - 确保这些依赖的
<groupId>、<artifactId>、<version>与当前编译版本2.7.7.0.0完全一致
3. 调整编译顺序,先编译核心依赖模块
不要单独执行mvn dependency:resolve,而是先编译ambari-metrics下的核心子模块,将其jar包安装到本地仓库:
mvn -B clean install -DskipTests -Drat.skip=true -pl ambari-metrics/ambari-metrics-timelineservice,ambari-metrics/ambari-metrics-host-aggregator,ambari-metrics/ambari-metrics-common -am
参数说明:
-pl指定要编译的模块路径-am自动编译这些模块依赖的其他模块
4. 执行完整编译与RPM打包
完成上述步骤后,再执行官方文档中的完整编译命令:
mvn -B clean install rpm:rpm -DnewVersion=2.7.7.0.0 -DbuildNumber=388e072381e71c7755673b7743531c03a4d61be8 -DskipTests -Dpython.ver="python >= 2.6" -Drat.skip=true
关键说明
- 单独执行
mvn dependency:resolve会跳过本地模块的编译,直接尝试从远程仓库拉取内部构件,必然失败,需先编译内部依赖模块 - 上述pom修改参考了Ambari社区的代码修复方案,解决了模块依赖顺序与scope配置错误的问题
内容的提问来源于stack exchange,提问作者Vndroid
相关产品推荐
相关产品推荐

