当我在 pom.xml 中明确声明非快照版本时,为什么 Maven 会下载数百个版本的 maven-metadata.xml 进行依赖?

问题描述 投票:0回答:1

在我的公司,我们正在升级到新版本的 Scala,但是当我运行

mvn clean install
时,在构建接近尾声时,它花费了 22 分钟(!)尝试从我们公司的 Nexus 下载有关这些第三方依赖项的元数据(所有 Cats 库:cats-core、cats-macros 等)。该部门以及我们的任何第 3 方部门都是“SNAPSHOT”版本。使用
mvn dependency:tree -Dverbose
我可以看到一些传递依赖项有一个版本范围
[2,3)
,但在我们的 pom.xml 文件中,我们明确将版本设置为 2.0.0 并且没有“SNAPSHOT”一词,如图所示:

<dependency><groupId>org.typelevel</groupId><artifactId>cats-core_2.13</artifactId><version>2.0.0</version></dependency>

但在构建过程中,它会尝试下载 2 到 3 之间的数百个版本。

它到底为什么这么做?这些快照版本到底是什么?据我所知,它们似乎不存在于 Maven Central 中。 我们的存储库或任何父/子 pom.xml 文件中都没有使用“SNAPSHOT”一词

screenshot of what I see in Nexus

screenshot of mvn build output

maven nexus scala-cats
1个回答
0
投票

好吧,我的一位同事最终解决了这个问题。

所以只是为了澄清情况:我们有一个传递依赖,需要一个 Cats 依赖的范围

[2,3)
。这本身并不是问题:在 Maven 中,如果您显式声明依赖项,它将用于所有传递依赖项需求(即使它们声明了一个范围)。

但是,在我们的 pom.xml 中,我们也使用了 Ant 插件

maven-antrun-plugin
(我们有一些旧的 JSP 代码需要使用 Ant 进行编译)。看来 Ant 插件不尊重声明的依赖关系,然后开始搜索范围内的所有版本(大约有数百个)。

因此,解决方案是 (a) 确保使用 Ant 构建的代码不会导入依赖于 Cats 的代码,或者 (b) 在我们传递给 Ant 插件的 中添加一个标签。

所以是的...相当晦涩...

© www.soinside.com 2019 - 2024. All rights reserved.