大道至简,知易行难
广阔天地,大有作为

解决Maven中央仓库被墙或下载缓慢等问题(关于使用Maven全局或工程级别的国内镜像)

      Maven是日常工作中重要的依赖管理和构建管理工具。
      受限于国内复杂的网络情况,尽管大部分正规的企业可能搭建了Nexus等私服,但在日常工作中仍然经常遇到下面的三点问题:
      1)不能成功下载中央库中的相关Jar包、JavaDoc或JavaSource;
      2)有时私服也不能从中央仓库同步相关的Jar包、JavaDoc或JavaSource;
      3)在使用私服时,当工作场所发生切换(如从单位到家中)又需要下载新的依赖时,家中的网络不能成功下载中央库中的相关Jar包、JavaDoc或JavaSource,需要手动先删除私服的配置然后下载依赖再重新添加私服的配置,反之亦然;
      我们可以经常在Eclipse中看到由于不能成功下载依赖而导致项目中POM文件报错的问题(Non-resolvable parent POM: Could not find artifact XX):
3
      此时,可以首先尝试简单地通过Maven-Update解决依赖的下载问题,大致有三种可能:
      1)Maven-Update成功地从中央库中下载到了相关Jar包;
      2)能够在在IDE的Progress视图中观察到Maven-Update尝试连接到了中央仓库并开始下载相关Jar包的行为,但由于网络问题超时卡死或者下载失败(对于Eclipse而言基本就是卡死需要重启了);
      3)当第二种情况出现时,之后再进行Maven-Update时也不会再尝试从中央仓库中下载(即本地仓库中已经有了不完整的Jar包等),此时需要先到本地.仓库中找到并彻底删除相应的Jar包所在的目录(例如C:\.m2\repository\commons-lang\commons-lang\2.6),然后重试或在配置了镜像后重试;

      对于Maven镜像仓库的配置主要有两个维度,即全局配置和工程级配置。以下的配置文件截至2016年11月13日实测可用。
一、Maven全局国内镜像(阿里云)
      在相应Maven的配置文件(请注意IDE自带的Maven和指定的Maven之间的区别)中,可以通过mirrors标签设置全局镜像。很多人曾经怀疑,既然可以设置工程级的镜像为何还需要设置全局镜像,笔者在工作中也一直倾向于在项目级POM中指定镜像;然而,当需要使用诸如mvn eclipse:eclipse等将某些开源工程转换为Eclipse项目并使用时,往往就需要使用全局镜像,否则就必须修改、甚至一个一个地修改这些工程的POM文件以指定项目级的镜像
      在Maven配置文件中,可以找到名为mirrors的标签,默认是被注释掉的:
1
向其中增加相应的国内镜像即可,此处使用阿里云的国内镜像,实测速度可圈可点:
2
二、Maven工程级国内镜像
     与使用私服时类似,我们也可以通过在工程级别的POM文件中指定镜像。注意这里有两层repositories标签,较为诡异,有些版本的Eclipse中也会报错,但不影响使用。事实上,笔者一般用完了就会删掉:
5
三、终极解决方案
      当遇到相对诡异的问题时(下载中央库中的相关Jar包、JavaDoc或JavaSource任意一个有问题时)还可以依次考虑以下的解决步骤:
      1)在本地仓库找找到相应Jar包所在的目录,并观察其结构是否正常。以操作ZooKeeper常用的Curator而言,其Recipes的Jar包及对应的JavaSource通常包括了哈希值及POM等内容:
4
      2)若本地仓库中的相关Jar包、JavaDoc或JavaSource有问题,可以将其删除后使用Maven-Update等方法重新下载,此时如果使用中央仓库下载仍有问题(下载失败、下载极度缓慢等等),则可以在设置国内镜像后重新尝试,一般均可解决;
      3)如果各种都下载不到相关的内容,那么可以从曾经成功下载过相应Jar包的小伙伴那里直接拷贝一个(注意保留文件夹结构和所有的.pom、.md5、.sha1等文件);

转载时请保留出处,违法转载追究到底:进城务工人员小梅 » 解决Maven中央仓库被墙或下载缓慢等问题(关于使用Maven全局或工程级别的国内镜像)

分享到:更多 ()

评论 抢沙发

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址