Maven下载jar依赖失败

39

我有一个非常简单的默认应用程序,用于测试我的Windows 7计算机上的Eclipse Indigo/Maven v3.0.1设置。 Hello World应用程序从Eclipse中运行良好。

现在,我正在尝试使用 mvn install 命令行进行测试。

此时,我看到Maven下载了大量依赖项。由于某种原因,它会卡在下载一个文件上,只会停止部分下载。这个问题每次发生位置都不一样,但是当前它始终卡在同一个jar文件上,例如...

  

http://repo1.maven.org/maven2/org/apache/maven/surefire/surefire-booter/2.5/surefire-booter-2.5.jar

如果我从浏览器中下载此文件,则可以完美地工作。实际上相当快速。如果我手动将已下载的文件复制到 .m2 存储库目录中的适当目录中,则安装程序会继续下载依赖项,直到随机遇到另一个停止点。

这是我的POM,虽然我不确定它是否有帮助,因为它非常基本,而且使用 mvn compile 也可以正常工作。

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
  <modelVersion>4.0.0</modelVersion>

  <groupId>com.kyeema</groupId>
  <artifactId>QServer</artifactId>
  <version>0.0.1-SNAPSHOT</version>
  <packaging>jar</packaging>

  <name>QServer</name>
  <url>http://maven.apache.org</url>

  <properties>
    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
  </properties>

  <dependencies>
    <dependency>
      <groupId>junit</groupId>
      <artifactId>junit</artifactId>
      <version>3.8.1</version>
      <scope>test</scope>
    </dependency>
  </dependencies>
</project>

这里有一些调试输出,涉及到一些虚拟的jar文件?

[INFO] Surefire report directory: C:\workspace\QServer\target\surefire-reports
[DEBUG] Setting system property [user.dir]=[C:\workspace\QServer]
[DEBUG] Setting system property [localRepository]=[C:\Users\Andre\.m2\repository]
[DEBUG] Setting system property [basedir]=[C:\workspace\QServer]
[DEBUG] Using JVM: C:\Program Files\Java\jdk1.7.0\jre\bin\java
[DEBUG] dummy:dummy:jar:1.0 (selected for null)
[DEBUG]   org.apache.maven.surefire:surefire-booter:jar:2.7.2:compile (selected for compile)
[DEBUG]     org.apache.maven.surefire:surefire-api:jar:2.7.2:compile (selected for compile)
[DEBUG] Adding to surefire booter test classpath: C:\Users\Andre\.m2\repository\org\apache\maven\surefire\surefire-booter\2.7.2\surefire-booter-2.7.2.jar Scope: compile
[DEBUG] Adding to surefire booter test classpath: C:\Users\Andre\.m2\repository\org\apache\maven\surefire\surefire-api\2.7.2\surefire-api-2.7.2.jar Scope: compile
[DEBUG] dummy:dummy:jar:1.0 (selected for null)
[WARNING] Missing POM for org.apache.maven.surefire:surefire-junit3:jar:2.7.2: Error resolving project artifact: Failure to find org.apache.maven.surefire:surefire-junit3:pom:2.7.2 in http://mirrors.ibiblio.org/pub/mirrors/maven2 was cached in the local repository, resolution will not be reattempted until the update interval of ibiblio.org has elapsed or updates are forced for project org.apache.maven.surefire:surefire-junit3:pom:2.7.2
[DEBUG]   org.apache.maven.surefire:surefire-junit3:jar:2.7.2:test (selected for test)
[INFO] ------------------------------------------------------------------------
[INFO] BUILD FAILURE
[INFO] ------------------------------------------------------------------------
[INFO] Total time: 0.626s
[INFO] Finished at: Tue Aug 16 13:18:42 PDT 2011
[INFO] Final Memory: 8M/154M
[INFO] ------------------------------------------------------------------------
[ERROR] Failed to execute goal org.apache.maven.plugins:maven-surefire-plugin:2.7.2:test (default-test) on project QServer: Error to resolving surefire provider dependency: Missing:
[ERROR] ----------
[ERROR] 1) org.apache.maven.surefire:surefire-junit3:jar:2.7.2
[ERROR] 
[ERROR] Try downloading the file manually from the project website.
[ERROR] 
[ERROR] Then, install it using the command:
[ERROR] mvn install:install-file -DgroupId=org.apache.maven.surefire -DartifactId=surefire-junit3 -Dversion=2.7.2 -Dpackaging=jar -Dfile=/path/to/file
[ERROR] 
[ERROR] Alternatively, if you host your own repository you can deploy the file there:
[ERROR] mvn deploy:deploy-file -DgroupId=org.apache.maven.surefire -DartifactId=surefire-junit3 -Dversion=2.7.2 -Dpackaging=jar -Dfile=/path/to/file -Durl=[url] -DrepositoryId=[id]
[ERROR] 
[ERROR] Path to dependency:
[ERROR] 1) dummy:dummy:jar:1.0
[ERROR] 2) org.apache.maven.surefire:surefire-junit3:jar:2.7.2
[ERROR] 
[ERROR] ----------
[ERROR] 1 required artifact is missing.
[ERROR] 
[ERROR] for artifact:
[ERROR] dummy:dummy:jar:1.0
[ERROR] 
[ERROR] from the specified remote repositories:
[ERROR] ibiblio.org (http://mirrors.ibiblio.org/pub/mirrors/maven2, releases=true, snapshots=false)

1
首先,如果您正在从命令行运行,请更新到最新版本的maven(3.0.3) - khmarbaise
你尝试过使用除上述仓库以外的其他仓库吗? - fgysin
此外,听起来像是网络问题... - khmarbaise
1
糟糕,按下回车键太快了。我不确定这是一个校验和错误,但如果我没有找到解决方法,我会加入日志记录。我找到了“一”种解决方案。我在settings.xml文件中添加了一个镜像,指向http://mirrors.ibiblio.org/pub/mirrors/maven2,第一次就成功了。我现在还打算升级到3.0.3版本,看看是否可以解决问题。谢谢大家! - Andre
好像升级到Maven v3.0.3会在另一个区域中破坏下载。:-/将尝试将输出添加到原始问题中。 - Andre
显示剩余4条评论
7个回答

18

大家好,我曾经遇到下载大文件的同样问题。我们可能都在使用轻量级HTTP Wagon。如果您查看文档:

http://maven.apache.org/wagon/wagon-providers/wagon-http-lightweight/

已知限制:

主要限制是您无法下载不完全适合内存的数据。

所以我增加了Maven的内存:

export MAVEN_OPTS="-Xmx1024m"

然后,它奏效了。 (!!!!)


3
自从你在2013年发表了评论以来,我想指出,对于我来说,这个方法仍然适用于今天(2018年),使用的是Maven版本3.0.5和Java版本1.8.0_162。谢谢! - Mark Madej
2
仍然适用于2020年。 - Kimball Robinson

17

我遇到了同样的问题。在我的情况下,AVG杀毒软件阻止Maven下载构件。暂时禁用它有所帮助。


2
更具体地说,AVG Link Scanner与Java 7结合使用。禁用AVG Link Scanner或回退到Java 6,你就可以顺利进行了(我试过3或4次打开和关闭每个组件,我相当确定只是链接扫描器的问题)。 - Lucas
我尝试为JAR文件的位置添加AVG在线防护的例外,但没有成功。不得不暂时禁用AVG才能下载构件。 :( - John K
给这个人颁发一枚奖章! - xmlParser

5

就我所经历的而言,这是问题的答案。

如果我使用Maven v3.0.1,则必须添加上述镜像才能正常工作。

如果我升级到Maven v3.0.3,那么我必须删除上述镜像才能使其正常工作。:-)

我在两台分开的机器上尝试了这个方法,并且表现完全相同。这可能意味着网络连接有问题,因为它们都通过同一个路由器连接。

总之,这里基本上有两种解决方法。我不确定哪种是“正确”的响应,但至少它们让我继续前进。

感谢所有提交答案的人。


我有同样的问题,但我无法解决它。你所说的“上面列出的镜像”是什么意思?这在我使用的maven 2.2.1、2.2.0和3.0.3版本中都发生了。 - Rich
@Rich 这里是添加镜像的详细信息[http://maven.apache.org/guides/mini/guide-mirror-settings.html],而镜像本身是ibiblio镜像,具体规格在这里[http://repo1.maven.org/maven2/.meta/repository-metadata.xml]。 - Andre
4
谢谢。对我来说,两个镜像都无法使用,但我通过从Java 7降级到Java 6来解决了问题。 - Rich

4
我通过降级到Java 6来解决了这个问题。

3
在我的情况下,我前往本地仓库 (~/.m2/repository/),找到相应的组,并发现下载卡住的构件有两个具有 .part.part.lock 扩展名的文件。删除它们可以解决问题。

2

我曾经遇到过完全相同的问题,简而言之就是网络问题。和你尝试的一样,我可以用浏览器轻松地获取文件。

为了测试目的,你是否使用了代理?并且 Maven 的代理设置是否与浏览器匹配?


我完全没有输入任何代理设置,但我在想连接我的ISP(Comcast)时是否是来自我的路由器的某种黑魔法? - Andre
所以家庭ISP不是企业网络 - ISP喜欢玩弄HTTP。在我的情况下,代理是使用http的首选方法,但我们可以跳过它,并理解一些流量可能会被QoS丢弃 - 这就是发生在我身上的事情。我将四处搜索,看看是否有设置maven重试或http选项的方法 - 也许浏览器正在为您重试或执行与mvn不同的操作(如HTTP PUSH - 或者不是)。 - cschooley

0

我曾经遇到过类似的问题。问题出在将Nexus移动到VPN上。结果发现我有DNS条目被缓存了。

清除DNS缓存就解决了。对于像Ubuntu这样的系统,记录如下:

sudo systemd-resolve --flush-caches

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接