Maven仓库从Nexus迁移到JFrog Artifactory踩坑

早过忘川 提交于 2020-03-07 12:27:55

1.概述

部门内用Nexus搭建Maven仓库,仓库中除了有配置阿里云仓库代理和中央仓库代理,也有部门自己封装的crmd平台jar包。

总体依赖传递为 spring-boot(官方) --> base-parent(crmd平台包) --> platform-parent(crmd平台包) --> app-parent(crmd平台包) --> 应用代码,平台的jar包在中间做了一些封装和优化,比如统一spring boot等版本号,部门所有的应用的引用的spring boot版本号一致,便于查询问题。

 

1).把crmd的包下载到本地仓库后,调整base-parent.pom的仓库地址,用JFrog Artifactory的仓库地址,替换Nexus的仓库地址。

2).本地的settings.xml中,用JFrog Artifactory的仓库地址,替换Nexus的仓库地址。

3)。mvn install  报了一堆的错误,吓死宝宝 

 

2.问题一 报错缺少plugin插件

2.1.报错信息

具体报错截取信息如下:

[WARNING] The POM for org.apache.maven.plugins:maven-site-plugin:jar:3.8.2 is missing, no dependency information available

[WARNING] Failed to retrieve plugin descriptor for org.apache.maven.plugins:maven-site-plugin:3.8.2: Plugin org.apache.maven.plugins:maven-site-plugin:3.8.2 or one of its dependencies could not be resolved: Failure to find org.apache.maven.plugins:maven-site-plugin:jar:3.8.2 in http://192.168.1.193:8080/artifactory/group_public_maven/ was cached in the local repository, resolution will not be reattempted until the update interval of group_public_maven has elapsed or updates are forced

2.2.分析思路

从报错信息可以看到,是由于在中央仓库下载插件的时候报错,所以检查中央仓库是否有相关插件。

从http://192.168.1.193:8080/artifactory/group_public_maven 中央仓库,搜索相关插件,确实没找到。

后来对照Nexus的中央仓库配置,发现有个2个中央仓库地址没配置到jfrog。

https://repo1.maven.org/maven2/
https://maven.aliyun.com/nexus/content/groups/public

2.3 解决方案

将这2个地址配置到中央仓库组后,再次install,以上报错消失,问题解决

 

3.问题二 报错[FATAL] The parents form a cycle 

3.1.报错信息

具体报错截取信息如下:

[WARNING] The POM for com.xzy.crmd.platform:crmd-platform-base:jar:2.1.0-20200108.084048-1 is invalid, transitive dependencies (if any) will not be available: 3 problems were encountered while building the effective model for com.xzy.crmd.platform:crmd-platform-base:[unknown-version]

[ERROR] Invalid packaging for parent POM com.xzy.crmd.platform:crmd-platform-base:[unknown-version], must be "pom" but is "jar" @ 

[ERROR] Invalid packaging for parent POM com.xzy.crmd.platform:crmd-platform-base:[unknown-version], must be "pom" but is "jar" @ 

[FATAL] The parents form a cycle: com.xzy.crmd.platform:crmd-platform-base:2.1.0-SNAPSHOT -> com.xzy.crmd.platform:crmd-platform-base:2.1.0-SNAPSHOT @ 

 

3.2.分析思路

用mvn install,是可以正常编译,但是在运行的时候报缺少jar包,经过比对lib目录的jar包,发现是编译的时候,部分jar包没自动打包进来。

mvn dependency:tree命令,查看依赖,发现有个warning:xxx  is invalid, transitive dependencies (if any) will not be available,不是很明显,无法定位问题。

mvn dependency:tree -X命令,显示更多错误信息,如3.1

分析错误日志,同时有fatal和error,先看fatal,是说crmd-platform-base:2.1.0-SNAPSHOT.pom存在The parents form a cycle(大概是 父级节点存在循环依赖)。

于是查看本地仓库的crmd-platform-base:2.1.0-SNAPSHOT.pom,发现本级pom的artifactId与parent的artifactId一致,定位出是pom有问题,原来是上传jar的时候,选择自动选择生成pom,结果生成的pom有问题

<parent>

  <groupId>com.xzy.crmd.platform</groupId>

  <artifactId>crmd-platform-base</artifactId>

  <version>2.1.0-SNAPSHOT</version>

 </parent>

 <artifactId>crmd-platform-base</artifactId>

3.3.解决方案

调整手动上传jar方法,一次上传的时候,同时选择jar和pom文件,重新mvn dependency:tree -X,问题解决

 

 

4.总结

解决maven问题,要先对maven的依赖传递有了解。

仓库搜索顺序如下:local_repo > settings_profile_repo > pom_profile_repo > pom_repositories > settings_mirror > central

父级pom的dependencyManagement里面的jar,你直接在子级工程中写<parent>标签是没有用的,不会自动引入的,

还要重写一下<groupId> ,<artifactId>。

父级pom的直接dependencies里面的jar,你直接在子级工程中写<parent>标签,就自动引入的。

分析错误日志,同时有fatal和error,先看fatal

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!