查找 Maven 依赖项的顺序是什么?

What is the order of lookup Maven dependencies?

我需要添加一个 jar 说 abc.jar (在 Maven 中央仓库中可用)。但这是用 Java 8 编译的。我正在使用 java 7,所以我得到 主要次要版本错误

由于项目是开源的并且在 GitHub 上可用。我在 pom.xml 的 Maven 编译器插件中更改 java 版本后在本地构建它。它对我有用。

现在我将这个 jar 上传到本地 Nexus 存储库。

这里的查找顺序是什么。由于具有相同名称的 jar 在 Maven 中央仓库中可用。在构建我的项目时,这个 jar 是从本地 nexus 还是从 Maven 中央仓库中挑选出来的?

您的本地缓存(~/.m2/repository)具有最高优先级,然后由您的 pom.xml~/.m2/settings.xml 中声明的存储库的顺序决定。 maven central 被隐式添加为最后一个 (afaik)。

因此,如果您将本地 Nexus 存储库添加到该 pom 声明中,应该没问题。

您也可以按照 here 所述自行覆盖中央存储库,但我不建议这样做。

您不应该使用相同的版本号重新部署它。 Maven 中工件的非快照发布不应该被覆盖。即使您所做的只是更改编译源代码的版本,您实际上是在创建一个新的工件。

不过,您确实可以选择支持您正在做的事情。你可以

  • 使用特定于您的工件的不同组 and/or 工件 ID 进行部署。
  • 使用相同的 artifact/group/version 进行部署,但使用分类器(例如 java8)。使用分类器允许在同一名称空间部署其他工件。

这两个选项中的任何一个都可以让您不必担心查找顺序,这不是您可以完全控制的事情。