java - 如何判断为特定 Artifact 指定快照版本的位置?

标签 java eclipse maven nexus

我正在使用 Maven 3.5.2 和 Java 8。

我正在开发一个项目,现在我在该项目的桌面版本上获得以下内容:

Could not find artifact ::jar:2.2.0-SNAPSHOT in ...

如果我查看我们的 Intranet Nexus 存储库,我会看到此 Artifact 的版本“2.2.0”,但看不到 2.2.0-SNAPSHOT。我们的快照 Artifact 在一段时间后就会过期,这会时不时地导致这样的问题。我们的 CI 服务器上的构建不会失败,因为 CI 服务器上的本地 Maven 存储库在每次构建之前都不会被清除(我已经提到过这应该发生),因此该 Artifact 的版本位于该本地 Maven 存储库中。事实上,今天早上早些时候,我的桌面本地 maven 存储库中有这个版本的 Artifact ,但不幸的是,我在尝试调试这个最初由其他用户向我报告的错误时删除了它。

在我们的应用程序 pom 中,我们根本没有指定此 Artifact 。它在父 pom 中指定。在该父 pom 中,未指定版本。

我想弄清楚的是这个 Artifact 的“2.2.0-SNAPSHOT”版本是在哪里指定的。我认为也许“dependency:tree”可以做到这一点,但不幸的是,如果这个插件无法解析所有依赖项,它就不会打印树,这就是在这种情况下发生的情况。

我可以在 Eclipse 中查看父 pom,并且在“依赖项”选项卡中,它使用“(托管:2.2.0-SNAPSHOT)”显示此 Artifact 。该父 pom 没有父项。

如果这个版本是“托管”的,我如何知道是什么在管理它?我可以在命令行中使用 mvn 或 Nexus gui 来告诉我指定此版本的内容吗?

更新:

我已经知道“dependencyManagement”部分通常是为“其他 pom”使用指定版本的地方,但我已经在整个 pom(应用程序和父级)中查找了此版本规范,并且没有'找不到它。

这里的第一个答案让我意识到我需要寻找 BOM Artifact ( Material list ),它仅用于指定 Artifact 组的版本。

当我最终查看父 pom 的 dependencyManagement 部分时,我看到它引用了一个 BOM Artifact ,当我访问该 Artifact 时,我找到了指定的版本。

所以现在,我想知道的是 Maven(或 Eclipse m2e)中是否有任何东西可以告诉我我必须挖掘什么才能找到答案。我感觉答案是否定的。

最佳答案

“托管” Artifact 的版本由 <dependencyManagement> 确定。 dependencyManagement 可能位于您的 POM 或父 POM 中。此外,它可能包含 <scope>import</scope> 的元素。 ,这意味着从指定的 POM 导入更多条目。

关于java - 如何判断为特定 Artifact 指定快照版本的位置?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55129510/

相关文章:

java - Servlet 类未找到异常

java - 如何将数据从 HTML 传输到 Spring Controller

java - weblogic-maven-plugin 中缺少目标

Java,如何解析 JSON 进行地理定位?

java - Maven:如何将本地jar打包成最终jar?

java - 如何重置 Eclipse 工作区的 View

java - 我对 Maven 的理解正确吗?

java - 如何在 Maven 中跳过某个子模块的安装?

eclipse - 如何指示 Eclipse 记录外部 jars 的相对路径?

maven - 带有 Maven 依赖项的 Jersey + Gradle 不起作用