一个Maven的问题。<mirrorOf>标签的作用。pom文件存在,项目启动报找不到依赖的jar包
运行代码出现了找不到依赖的情况,但是pom文件是引入依赖的,找不到我们自己一个私库的jar。
我的maven环境配置的是配的阿里云maven镜像。阿里云仓库中并没有我们公司的的私库jar
问题出在配置上
原来的配置
<mirror> <id>aliyunmaven</id> <mirrorOf>*</mirrorOf> <name>阿里云公共仓库</name> <url>https://maven.aliyun.com/repository/public</url> </mirror>
修改后的配置
<mirror> <id>aliyunmaven</id> <mirrorOf>central</mirrorOf> <name>阿里云公共仓库</name> <url>https://maven.aliyun.com/repository/public</url> </mirror>
mirrorOf标签内容从 * 换成了 central
这样配置的意思是jar可以从本地maven仓库(私库的jar我下载过到本地)+阿里云远程镜像拉取
但如果是*,就代表mavenjar包都需要走阿里云镜像。以至于会报jar找不到。
找了一篇内容介绍,放在下边。
文章参考自:
当maven需要到的依赖jar包不在本地仓库时, 就需要到远程仓库下载 .
这个时候如果mavensetting.xml中配置了镜像 , 而且镜像配置的规则中匹配到目标仓库时 ,
maven认为目标仓库被镜像了, 不会再去被镜像仓库下载依赖jar包, 而是直接去镜像仓库下载.
简单而言, mirror可以拦截对远程仓库的请求 , 改变对目标仓库的下载地址。
在java的maven项目中编译时经常会配置maven的mirrorOf,
例如在settings文件中配置aliyun的仓库:
<mirror> <id>nexus-aliyun</id> <mirrorOf>*</mirrorOf> //代理仓库配置 <name>Nexus aliyun</name> <url>http://maven.aliyun.com/nexus/content/groups/public</url> </mirror>
<repositories> <repository> <id>repo.jenkins-ci.org</id> //repostoryId <url>https://repo.jenkins-ci.org/public/</url> </repository> </repositories>
<id>my-repo-id</id> //repostoryId <name>repo name</name> <url>http://maven.aliyun.com/nexus/content/groups/public</url> <releases> <enabled>true</enabled> </releases> <snapshots> <enabled>true</enabled> </snapshots> <layout>default</layout> </repository>
mirrorOf=“*” //刚才经过,mirror一切,你配置的repository不起作用了
mirrorOf=my-repo-id //镜像my-repo-id,你配置的my-repo-id仓库不起作用了
mirrorOf=*,!my-repo-id //!表示非运算,排除你配置的my-repo-id仓库,其他仓库都被镜像了。就是请求下载my-repo-id的仓库的jar不使用mirror的url下载,其他都是用mirror配置的url下载
mirrorOf=external:* //如果本地库存在就用本地库的,如果本地没有所有下载就用mirror配置的url下载
例子
所以需要修改镜像的mirrorOf规则 , 避免默认从镜像中下载
maven的conf/setting.xml
<mirrors> <!--国内阿里云提供的镜像,非常不错--> <mirror> <!--This sends everything else to /public --> <id>aliyun_nexus</id> <!--对所有仓库使用该镜像,除了一个名为maven_nexus_201的仓库除外--> <!--这个名为maven_nexus_201的仓库可以在javamaven项目中配置一个repository--> <mirrorOf>*,!maven_nexus_201</mirrorOf> <url>http://maven.aliyun.com/nexus/content/groups/public/</url> </mirror> </mirrors>