maven build 失败之重复引用
今天接手一个旧的Maven 项目,需要在本地搭建开发环境。一开始还挺顺利的,但也不是没有问题,遇到的都是缺少 Jar 包或者缺少 POM.xml 文件,只要从公司内部服务器上取即可。考虑到网络带宽和速度,公司在自己的服务器上搭建了Maven 仓库,方便员工下载使用。当然,如果是个人,完全可以自己直接从 Maven 官方仓库下载:
http://repo.maven.apache.org/maven2/
但如果公司内网禁止直接访问,而公司服务器的仓库上又恰好没有,那就需要自己去官网下。
Connect to repo.maven.apache.org:443 [repo.maven.apache.org/151.101.196.215] failed: Connection refused: connect -> [Help 1]
公司内部有仓库,可以在项目的pom.xml配置文件设置repositories即可,有兴趣可以另起一篇,这里不再赘述。
好了,言归正传,遇到的问题如下:
Failed to execute goal on project sg-ecare-service: Could not resolve dependencies for project com.aiait.cs:sg-ecare-service:jar:2.0.0: Failed to collect dependencies at jasperreports:jasperreports:jar:3.5.0 -> commons-collections:commons-collections:jar:3.2.1.redhat-7: Failed to read artifact descriptor for commons-collections:commons-collections:jar:3.2.1.redhat-7: Could not transfer artifact org.apache.commons:commons-parent:pom:22-redhat-2 from/to central (https://repo.maven.apache.org/maven2): Connect to repo.maven.apache.org:443 [repo.maven.apache.org/151.101.196.215] failed: Connection refused: connect -> [Help 1]
从加粗的描述可以看出,找不到commons-collections:jar:3.2.1下的依赖包commons-parent:pom:22-redhat-2, 那么,往回找,看看pom.xml 里面的commons-collections:jar,方便定位该包所在路径。
如上图,版本是3.1,跟错误描述的3.2.1版本并不一致,那么,可以肯定commons-collections:jar被重复引用了。而且,该版本并非我们所需,那么,我们需要找到是谁引用了,然后将其排除。看以上错误描述继续往回找,可以发现是这个包引用了: jasperreports:jasperreports:jar:3.5.0
打开其 pom.xml文件,确实如此。
那么,此时我们就需要将这个不需要的依赖包给排除掉,具体设置如下:
至此,重新输入maven install 命令,一路顺风顺水,问题搞定。
以上,给遇到类似问题的童鞋一点思路。