新的maven依赖版本拉动pom,而不是jar到私人nexus repo?

时间:2016-02-02 20:31:44

标签: java maven jar pom.xml nexus

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

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

Hibernate newest release stable version

当我运行maven install时,我在nexus服务器中看到现在列出了3.5.4-Final,但在其目录中只有一个项目的pom.xml文件,而且没有任何关联的JAR。 / p>

当我检查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]

1 个答案:

答案 0 :(得分:4)

正如您提供的link中所述

  

Hibernate核心模块的聚合器。

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

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

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

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

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

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

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

相关问题