【问题标题】:Maven Build Failure -- DependencyResolutionExceptionMaven 构建失败——DependencyResolutionException
【发布时间】:2021-07-02 21:50:48
【问题描述】:

我正在安装一个具有 Maven 依赖项的包,并在我尝试清理它时得到一个 DependencyResolutionException。 克隆后,我导航到该目录并运行以下命令进行安装,没有错误:

mvn install:install-file -Dfile=./lib/massbank.jar -DgroupId=massbank  -DartifactId=massbank -Dversion=1.0 -Dpackaging=jar
mvn install:install-file -Dfile=./lib/metfusion.jar -DgroupId=de.ipbhalle.msbi  -DartifactId=metfusion -Dversion=1.0 -Dpackaging=jar

然后:

mvn clean package 

使用以下控制台输出:

[INFO] Scanning for projects...
[INFO] 
[INFO] --------------------< MassBank2NIST:MassBank2NIST >---------------------
[INFO] Building MassBank2NIST 0.0.2-SNAPSHOT
[INFO] --------------------------------[ jar ]---------------------------------
[INFO] ------------------------------------------------------------------------
[INFO] BUILD FAILURE
[INFO] ------------------------------------------------------------------------
[INFO] Total time:  0.450 s
[INFO] Finished at: 2021-04-07T01:08:28-04:00
[INFO] ------------------------------------------------------------------------
[ERROR] Failed to execute goal on project MassBank2NIST: Could not resolve dependencies for project MassBank2NIST:MassBank2NIST:jar:0.0.2-SNAPSHOT: Failed to collect dependencies at edu.ucdavis.fiehnlab.splash:core:jar:1.8: Failed to read artifact descriptor for edu.ucdavis.fiehnlab.splash:core:jar:1.8: Could not transfer artifact edu.ucdavis.fiehnlab.splash:core:pom:1.8 from/to maven-default-http-blocker (http://0.0.0.0/): Blocked mirror for repositories: [EBI (http://www.ebi.ac.uk/intact/maven/nexus/content/repositories/ebi-repo/, default, releases+snapshots), releases (http://gose.fiehnlab.ucdavis.edu:55000/content/groups/public, default, releases+snapshots)] -> [Help 1]
[ERROR] 
[ERROR] To see the full stack trace of the errors, re-run Maven with the -e switch.
[ERROR] Re-run Maven using the -X switch to enable full debug logging.
[ERROR] 
[ERROR] For more information about the errors and possible solutions, please read the following articles:
[ERROR] [Help 1] http://cwiki.apache.org/confluence/display/MAVEN/DependencyResolutionException

如有必要,我可以发布调试日志开关的输出,但它很长。我也可以发布 pom.xml,但是据我所知,它会根据需要引用存储库。

我搜索过类似的帖子,但似乎没有一个包含相同系列的错误或类似的错误。有人可以帮我破译这些错误吗?

谢谢!

【问题讨论】:

标签: maven pom.xml dependency-resolution


【解决方案1】:

您不必降级 Maven。这里发生的情况是,从 3.8.1 开始,Maven 带有一个默认配置来阻止所有 HTTP(不安全)存储库。最好的方法是升级您的存储库并使其安全 (HTTPS)。

但是,您可以通过将此镜像添加到您的~/.m2/settings.xml 来告诉 Maven 允许从您的不安全存储库下载:

<mirror>
  <id>insecure-repo</id>
  <mirrorOf>external:http:*</mirrorOf>
  <url>http://www.ebi.ac.uk/intact/maven/nexus/content/repositories/ebi-repo/</url>
  <blocked>false</blocked>
</mirror>

blocked 设置为false 将解决您的问题。请注意,上面的 sn-p 假设 www.ebi.ac.uk 的存储库镜像了所有不安全的 HTTP 存储库(这就是 external:http:* 的意思)。

您还可以取消阻止单个存储库。例如,JasperSoft 存储库是不安全的,我使用以下命令解除阻止:

<mirror>
  <id>jaspersoft-third-party-mirror</id>
  <mirrorOf>jaspersoft-third-party</mirrorOf>
  <url>http://jaspersoft.jfrog.io/jaspersoft/third-party-ce-artifacts/</url>
  <blocked>false</blocked>
</mirror>

【讨论】:

  • 更新了我的答案,说明如何解除对单个存储库的阻止。
  • 谢谢 - 我意识到我将我的 &lt;mirror&gt; 声明放在个人资料中,所以它没有被提取。
  • 如果我得到 2 个不同的存储库作为 repo1 和 repo2,然后分别为两个存储库创建 2 个镜像,如下所示,但我仍然收到错误消息。 repo1-mirrorrepo1xx/</url> falserepo2-mirror repo2xxyyy/</url> false
  • 已经浪费了 1 天来解决这个问题,您节省了第二个。干杯!
【解决方案2】:

如果您无权访问 ~/.m2/settings.xml,因为您的构建由云 CI/CD 处理,或者您想与您的团队成员共享此解决方案。最好的方法是在项目中创建自己的 maven 设置文件。

  1. 在您的项目中创建.mvn 文件夹。
  2. .mvn 文件夹内创建custom-settings.xml 文件,包含此类内容(在本例中,我们取消阻止releases.java.net 镜像的http 连接):
<settings xmlns="http://maven.apache.org/SETTINGS/1.2.0"
          xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
          xsi:schemaLocation="http://maven.apache.org/SETTINGS/1.2.0 http://maven.apache.org/xsd/settings-1.2.0.xsd">
    <mirrors>
        <mirror>
            <id>releases-java-net-http-unblocker</id>
            <mirrorOf>releases.java.net</mirrorOf>
            <name>releases.java.net</name>
            <url>http://maven.java.net/content/repositories/releases/</url>
            <blocked>false</blocked>
        </mirror>
    </mirrors>
</settings>
  1. .mvn文件夹内创建maven.config文件,内容如下:
--settings ../.mvn/custom-settings.xml

或者你可以直接运行mvn clean install --settings .mvn/custom-settings.xml

【讨论】:

    【解决方案3】:

    Maven 的release note for version 3.8.1 中明确提到了“Blocked mirror for repositories”错误:

    当我的 HTTP 存储库被阻止时如何解决?

    如果存储库是在你的 pom.xml 中定义的,请在你的源代码中修复它。

    如果存储库是在您的一个依赖项 POM 中定义的,您将收到如下消息:

    [ERROR] Failed to execute goal on project test: Could not resolve dependencies for project xxx: Failed to collect dependencies at my.test:dependency:version -> my.test.transitive:transitive:version: Failed to read artifact descriptor for my.test.transitive:transitive:jar:version: Could not transfer artifact my.test.transitive:transitive:pom:version from/to maven-default-http-blocker (http://0.0.0.0/): Blocked mirror for repositories: [blocked-repository-id (http://blocked.repository.org, default, releases+snapshots)]
    

    他们继续提供一些避免问题的方法:

    要修复的选项是:

    • 将依赖版本升级到更新的版本,用 HTTPS 替换过时的 HTTP 存储库 URL,

    • 保留依赖版本,但在您的设置中定义镜像。

    另外,我想,更简单、更短期的选择是将您的 Maven 版本回滚到 3.8.1 之前的任何版本。

    【讨论】:

      【解决方案4】:

      打开文件 ${MAVEN_HOME}/conf/settings.xml

      并注释这些行。

      <mirror>
          <id>maven-default-http-blocker</id>
          <mirrorOf>external:http:*</mirrorOf>
          <name>Pseudo repository to mirror external repositories initially using HTTP.</name>
          <url>http://0.0.0.0/</url>
          <blocked>false</blocked>
      </mirror>
      

      【讨论】:

        【解决方案5】:

        【讨论】:

        • 感谢您快速链接到 maven 版本,如果 repo 是 http 而不是 https,它不会抱怨。这对我有用。
        【解决方案6】:

        使用apache-maven-3.8.1,在~/.m2/settings.xml中加入以下内容即可解决:

        <mirrors>
          <mirror>
            <id>internal-repository</id>
            <name>Maven Repository Manager running on https://repo1.maven.org/maven2</name>
            <url>https://repo1.maven.org/maven2</url>
            <mirrorOf>*</mirrorOf>
          </mirror>
        </mirrors>
        

        请参阅此链接https://maven.apache.org/guides/mini/guide-mirror-settings.html 了解发生错误的原因。

        【讨论】:

          【解决方案7】:

          这是由于最新的 maven 阻止了不安全的 HTTP 连接。一种可能性是向 maven settings.xml 添加镜像。最好的方法是更新 pom 文件以引用安全的 HTTPS 存储库(如果可用)。例如,我在 pom.xml 中进行以下配置时遇到了同样的问题。

          <repositories>
              <repository>
                  <releases>
                      <enabled>true</enabled>
                      <updatePolicy>daily</updatePolicy>
                      <checksumPolicy>ignore</checksumPolicy>
                  </releases>
                  <id>wso2-nexus</id>
                  <url>http://maven.wso2.org/nexus/content/groups/wso2-public/</url>
              </repository>
          </repositories>
          

          我能够通过如下更新 URL 来解决问题。在这里,我提到了 HTTPS 存储库,在我的案例中可用。

          <url>https://maven.wso2.org/nexus/content/groups/wso2-public/</url>
          

          【讨论】:

            【解决方案8】:

            apache-maven-3.6.3-bin 将解决 maven-default-http-blocker (http://0.0.0.0/) 被阻止的问题(为我修复)它适用于我

            【讨论】:

            • 这与@Satya Kaveti 的答案相同,并且已经详细解释了根本原因。
            【解决方案9】:

            我遇到了类似的问题,但使用 Vaadin。 有一个最简单的解决方案,就是把所有的 http:// 替换为 https://

            这是一个例子:

            <repository>
                <id>vaadin-addons</id>
                <url>https://maven.vaadin.com/vaadin-addons</url>
            </repository>
            

            【讨论】:

              【解决方案10】:

              对我来说,我不得不从 site 降级到旧版本 3.6.3 并且疯狂的问题消失了,希望 maven 社区可以解决这个问题,而无需我们对 settings.xml 做任何事情。

              【讨论】:

                【解决方案11】:

                最终不得不降级到 mvn 3.5

                brew卸载maven

                安装 mvn 3.5 的说明可以在

                找到

                https://formulae.brew.sh/formula/maven@3.5

                【讨论】:

                  猜你喜欢
                  • 1970-01-01
                  • 1970-01-01
                  • 2010-11-26
                  • 1970-01-01
                  • 2014-07-12
                  • 1970-01-01
                  • 1970-01-01
                  • 1970-01-01
                  • 1970-01-01
                  相关资源
                  最近更新 更多