标签:plugin url maven镜像 plugins host pid note 点击 mon
Maven和gradle是现在JAVA世界中最普遍的两个依赖管理工具。很多人最开始接触的便是maven,而即便是使用gradle的人,也不能保证你即将接触的项目不是基于maven的。
相信作为一个JAVA开发者,一定会遇到不少Maven相关的错误。这里总结一下一些maven的使用经验,能解决几乎所有平时能遇到的棘手问题。
解决方案:
以commons-collections为例,
mvn dependency:get -Dartifact=org.apache.commons:commons-collections4:4.4
。https://mvnrepository.com/
查找该jar所在的仓库,一般来说 central的jar,下载失败,肯定是因为网速问题。如果一些jar不在central,例如:<dependency>
<groupId>org.apache.hadoop</groupId>
<artifactId>hadoop-common</artifactId>
<version>2.6.0-cdh5.13.2</version>
</dependency>
网站会提示:Note: this artifact it located at Cloudera Rel repository (//repository.cloudera.com/content/repositories/releases/)
那么,要么你的项目pom.xml需要配置 repository要么 在 MAVEN_HOME/conf/settings.xml中的profile中配置全局repository
解决方案:
%USERPROFILE%\.IdeaIC2019.3\system\Maven
,重新打开IDEA,IDEA会update maven indices。maven镜像服务器是肯定需要配置的,有华为云,腾讯云,阿里云镜像服务器,又快又稳。注意,每个人所在的公司的网络环境可能有所不同,访问阿里云不一定是最快的,或者访问腾讯云不是最快的,甚至很慢。
可以在构建项目的时候多做测试。
<!-- 阿里云仓库 -->
<mirror>
<id>alimaven</id>
<mirrorOf>central</mirrorOf>
<name>aliyun-maven</name>
<url>http://maven.aliyun.com/nexus/content/repositories/central/</url>
</mirror>
<!-- 中央仓库1 -->
<mirror>
<id>repo1</id>
<mirrorOf>central</mirrorOf>
<name>Human Readable Name for this Mirror.</name>
<url>http://repo1.maven.org/maven2/</url>
</mirror>
<!-- 中央仓库2 -->
<mirror>
<id>repo2</id>
<mirrorOf>central</mirrorOf>
<name>Human Readable Name for this Mirror.</name>
<url>http://repo2.maven.org/maven2/</url>
</mirror>
<!-- 腾讯云 -->
<mirror>
<id>nexus-tencentyun</id>
<name>Nexus tencentyun</name>
<url>http://mirrors.cloud.tencent.com/nexus/repository/maven-public/</url>
</mirror>
<!--华为云 -->
<mirror>
<id>huaweicloud</id>
<url>https://mirrors.huaweicloud.com/repository/maven/</url>
</mirror>
注意,99%的JAR都是在中央仓库的,还有一些在公司的私服,也就是nexus repository,还有一些在第三方开源仓库,例如SpringPlugins:
<dependency>
<groupId>org.mortbay.jetty</groupId>
<artifactId>jetty</artifactId>
<version>6.1.26.cloudera.4</version>
</dependency>
Note: this artifact it located at Spring Plugins repository (//repo.spring.io/plugins-release/)
因此镜像服务器不要上来就配mirrorOf *, 这个表示所有的jar都从这里下载,这肯定是不行的。
<mirror>
<id>alimaven</id>
<mirrorOf>*</mirrorOf>
<name>aliyun-maven</name>
<url>http://maven.aliyun.com/nexus/content/repositories/central/</url>
</mirror>
正确做法是
<mirrorOf>external:*</mirrorOf>
或者是
<mirrorOf>central</mirrorOf>
external表示URL是127.0.0.1或者localhost以外的
参见https://github.com/apache/maven/blob/maven-3.3.9/... external的源码
另外,对于公司自己的私服,肯定是要在mirrorOf里面排除的,假设私服的id是 snaps,不论是在 pom.xml还是在 settings.xml的profiles里面的repository内配置了这个私服,
在mirror中的写法:
<mirrorOf>external:*,!snaps</mirrorOf>
而且对于某一个找不到jar的依赖,应该养成习惯,第一时间检查这个artifact是不是在maven中央仓库,是不是在某一个第三方仓库。如果在某一个第三方仓库,则把它加入到自己的pom.xml中,或者全局配置。
除此以外,还可以将这个仓库加入自己私服的PROXY代理中。
标签:plugin url maven镜像 plugins host pid note 点击 mon
原文地址:https://www.cnblogs.com/slankka/p/12202640.html