新的 Maven 依赖版本拉取 pom,而不是将 jar 放入私有 nexus 存储库中?

New maven dependency version pulling pom, not jar into private nexus repo?

我正在升级我在 java/maven/spring 应用程序中的一些依赖版本,它使用我们的 nexus 存储库作为镜像 maven central 的中央存储库。

我尝试将 hibernate 升级到最新版本的 3.5.4-Final,如下所示:

Hibernate newest release stable version

当我 运行 安装 maven 时,我在我的 Nexus 服务器中看到现在列出了 3.5.4-Final,但在其目录中只有一个 pom.xml 项目文件和 none 个相关联的 JAR。

当我检查 POM 时,我可以看到它的包装被列为 POM 而不是 JAR。

为什么会这样,如何让maven使用库的jar包版本而不仅仅是POM?

编辑 - 已发布 mvn 安装错误消息:

[ERROR] Failed to execute goal on project app: Could not resolve dependencies for project com.app:app:war:16.2.1-SNAPSHOT: Failure to find org.hibernate:hibernate:jar:3.5.4-Final in http://ssp-nexus1.mynexus-server.com:8081/nexus/content/groups/public was cached in the local repository, resolution will not be reattempted until the update interval of company.nexus.mirror has elapsed or updates are forced -> [Help 1]

如您提供的 link 中所述

Aggregator of the Hibernate Core modules.

因此,您链接的工件实际上是一个 pom,它聚合了(作为多模块)其他 Hibernate 工件。

相反,作为示例,hibernate-core 工件可以作为标准 Maven 依赖项(即 jar)找到 here

默认情况下依赖项有 type jar,因此如果您为依赖项添加 maven 坐标 (GAV) 而不是 pom 类型,maven 将查找它作为 jar。这就是为什么您会收到编辑中提到的错误的原因。

您应该从您的 pom 中删除它的依赖项,只添加您实际需要的休眠依赖项。根据经验,添加您在代码(例如导入语句)或配置文件中明确使用的依赖项,然后让 maven 处理所需的传递依赖项,前提是它们将在您的公司存储库中可用, 显然。

更新
根据您的最新评论和反馈,这里进一步解释了为什么仅更改现有 Hibernate 依赖项的版本就会遇到此问题:

  • 新的3.5.4-Final和之前的3.2.7.ga版本共享相同的groupId 和 Maven 存储库上的 artifactId
  • 然而,前者的类型为pom(它是一个pom文件),而后者的类型为jar(默认的)
  • 因此,之前存在的版本工作正常,并且更改了您将其从 jar 切换到 pom 的依赖项的版本,破坏了 maven 解析(正在寻找 jar 而不是 pom)
  • 的版本
  • 这主要是因为您从 ga 版本切换到 FINAL 版本。有关这些版本之间差异的进一步说明,您可以查看this SO question and this one

作为旁注,我发现更改版本号也会更改依赖类型有点不一致,这可能是一个争论点,但如果我是 Hibernate 团队,我会以不同的方式处理此版本管理。