Maven配置中pom.xml和setting.xml之间的关系
在日常的开发中,我们拿IDEA举例,一般会在电脑上自行下载安装Maven,然后在IDEA中配置我们安装的Maven路径,通过修改setting.xml文件,例如配置公共的镜像仓库地址,来提高依赖下载速率;或者配置内部私有的镜像仓库地址,来引入一些私有的依赖等等。
1、如何从指定的镜像仓库下载依赖
如下图在项目的pom.xml文件中增加<repositories>和<repository>标签,配置指定的镜像仓库ID和url,此处配置是项目全局生效
<project> ... <repositories> <repository> <id>my-repo</id> <url>http://example.com/maven-repo</url> </repository> </repositories> ... </project>
如果只想针对部分依赖项指定镜像仓库地址,可以如下配置:
<dependencies> <dependency> <groupId>com.example</groupId> <artifactId>my-library</artifactId> <version>1.0.0</version> <repositories> <repository> <id>my-repo</id> <url>http://example.com/maven-repo</url> </repository> </repositories> </dependency> </dependencies>
注:<repositories>下可以配置多个<repository>,也就是多个镜像仓库地址,首先会在本地仓库寻找,如果本地不存在,则会按配置的远程仓库列表顺序下载(此时会在setting文件中查找对应的镜像地址),直到找到为止。
2、Maven的setting.xml文件
Maven的setting.xml文件配置结构如下,id和name随意,保持唯一即可,可以配置多个镜像地址,一般至少要配置中央仓库(central)和公司的私有镜像。
<mirrors> <mirror> <id>mirrorId</id> <mirrorOf>mirrorOf</mirrorOf> <name>mirrorName</name> <url>mirrorUrl</url> </mirror> </mirrors>
注:其中的mirrorOf需要和pom文件<repository>中的id保持一致,表示仓库地址镜像。实际查找时,在setting文件中寻找和pom中的id相同的mirror,使用mirror中的url,替换掉pom文件中配置的仓库地址。
如果仓库存在认证,则可以增加如下配置,配置账号和密码,此处的<server>标签中id和pom中的<repository>标签中的id保持一致。
<settings> ... <servers> <server> <id>my-repo</id> <username>my-username</username> <password>my-password</password> </server> </servers> ... </settings>
mirrorOf存在匹配规则,例如central默认是中心仓库;* 表示匹配所有仓库;使用逗号分隔的值来指定需要使用镜像仓库的多个远程仓库;或者使用"external:"来匹配所有非Maven核心仓。(external:*
是一个特殊的值,Maven 会先尝试从本地的仓库或其他已配置的镜像中获取依赖项,如果没有匹配的结果,才会尝试使用 external:*
指定的镜像)
3、依赖下载顺序
1、首先会在本地仓库查找是否存在,如果存在则直接使用
2、如果本地仓库不存在,且pom文件配置了仓库地址,则采用setting文件中配置的对应ID的镜像仓库地址,如果不存在镜像地址,则采用pom文件中配置的url。
3、如果本地仓库不存在,pom文件也未配置仓库地址,则采用setting文件中配置的中央仓库(mirrorOf=central)地址,如果不存在中央仓库地址,则会使用maven官方的中心仓库下载地址。
注:<repositories>可以配置多个仓库地址,单个的查找逻辑和上面的一样,第一个仓库不存在,则按顺序从后续仓库下载,直到下载到。
4、配置的地址无法下载或者不生效解决方法
- 检查idea中配置的maven是否正确(自己下载的maven、setting.xml文件地址)
- 清除本地maven仓库中下载失败的文件,一般以.lastUpdated结尾,清空文件夹即可
- 查看pom中配置的id和setting中的mirrorOf是否对应,并验证setting.xml文件中配置镜像地址是否可以在浏览器访问
- 如果以上都正确,可以尝试下,不要点击maven的reload按钮,直接点击maven的编译按钮,看看是否可以下载下来
- 如果还是不生效,可以尝试清除idea的缓存,并重启idea
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· Manus爆火,是硬核还是营销?
· 终于写完轮子一部分:tcp代理 了,记录一下
· 别再用vector<bool>了!Google高级工程师:这可能是STL最大的设计失误
· 单元测试从入门到精通