Maven仓库从Nexus迁移到JFrog Artifactory踩坑
Posted zzy020128
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Maven仓库从Nexus迁移到JFrog Artifactory踩坑相关的知识,希望对你有一定的参考价值。
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://10.128.22.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://10.128.22.193:8080/artifactory/group_public_maven 中央仓库,搜索相关插件,确实没找到。
后来对照Nexus的中央仓库配置,发现有个2个中央仓库地址没配置到jfrog。
https://repo1.maven.org/maven2/
https://maven.aliyun.com/nexus/content/groups/public
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.ffcs.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.ffcs.crmd.platform:crmd-platform-base:[unknown-version]
[ERROR] Invalid packaging for parent POM com.ffcs.crmd.platform:crmd-platform-base:[unknown-version], must be "pom" but is "jar" @
[ERROR] Invalid packaging for parent POM com.ffcs.crmd.platform:crmd-platform-base:[unknown-version], must be "pom" but is "jar" @
[FATAL] The parents form a cycle: com.ffcs.crmd.platform:crmd-platform-base:2.1.0-SNAPSHOT -> com.ffcs.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.ffcs.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
以上是关于Maven仓库从Nexus迁移到JFrog Artifactory踩坑的主要内容,如果未能解决你的问题,请参考以下文章
maven私库nexus2.3.0-04迁移升级到nexus-3.16.1-02(异机迁移备份)