如何解决Maven 构建失败——DependencyResolutionException
我正在安装一个具有 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,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。这里发生的事情是,从 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
将解决您的问题。请注意,上述代码段假定 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>
,
如果您无权访问 ~/.m2/settings.xml
,因为您的构建是由云 CI/CD 处理的,或者您想与您的团队成员共享此解决方案。最好的方法是在项目中创建自己的maven设置文件。
- 在您的项目中创建
.mvn
文件夹。 - 在
custom-settings.xml
文件夹中创建包含此类内容的.mvn
文件(在本例中,我们为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>
- 在
maven.config
文件夹内创建.mvn
文件,内容如下:
--settings ./.mvn/custom-settings.xml
或者你可以直接运行mvn clean install --settings .mvn/custom-settings.xml
。
在 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 之前的任何版本。
,使用 apache-maven-3.6.3,它只使用 http
https://downloads.apache.org/maven/maven-3/3.6.3/binaries/apache-maven-3.6.3-bin.zip
,打开文件 /usr/local/Cellar/maven/{maven_version}/libexec/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>
,
使用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>
请参阅此链接 https://maven.apache.org/guides/mini/guide-mirror-settings.html 了解发生错误的原因。
,apache-maven-3.6.3-bin 将解决 maven-default-http-blocker (http //0.0.0.0/) 被阻止的问题(为我修复)它对我有用
,最终不得不降级到 mvn 3.5
brew 卸载 maven
安装 mvn 3.5 的说明可以在
找到版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。