在我的公司,我们正在升级到新版本的 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”一词
好吧,我的一位同事最终解决了这个问题。
所以只是为了澄清情况:我们有一个传递依赖,需要一个 Cats 依赖的范围
[2,3)
。这本身并不是问题:在 Maven 中,如果您显式声明依赖项,它将用于所有传递依赖项需求(即使它们声明了一个范围)。
但是,在我们的 pom.xml 中,我们也使用了 Ant 插件
maven-antrun-plugin
(我们有一些旧的 JSP 代码需要使用 Ant 进行编译)。看来 Ant 插件不尊重声明的依赖关系,然后开始搜索范围内的所有版本(大约有数百个)。
因此,解决方案是 (a) 确保使用 Ant 构建的代码不会导入依赖于 Cats 的代码,或者 (b) 在我们传递给 Ant 插件的 中添加一个标签。
所以是的...相当晦涩...