2016-02-02 42 views
1

我正在升级java/maven/spring应用程序中的一些依赖版本,该应用程序使用我们的nexus repo作为中央存储库镜像maven central。新的maven依赖版本拉pom,而不是jar到私人nexus回购?

我试图升级冬眠到它的上市为3.5.4决赛的最新版本:

​​3210

当我运行Maven安装,我在承上启下的服务器看到现在有3.5 .4-最终列出,但在它的目录中只有一个项目的pom.xml文件,并且它没有任何关联的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] 

回答

3

正如link提到你提供

聚合Hibernate的核心模块。

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

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

默认情况下,依赖关系具有type jar,因此如果为代替类型pom的依赖项添加maven坐标(GAV),maven将查找它为jar。所以这就是为什么你在编辑中遇到错误。

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

更新
按照你最新的意见和反馈,这里是为什么只是改变了你对这个问题的现有Hibernate依赖的版本进一步的解释:

  • 3.5.4 - 最终和以前的3.2.7。GA版本份额在Maven仓库一样groupIdartifactId
  • 但是,前者具有类型pom(这是一个POM文件),而后者具有类型jar(默认的)
  • 因此,先前存在的版本是工作的罚款,并改变你切换从jarpom依赖的版本,打破了Maven的分辨率(这是在寻找一个jar的版本,这反而是一个pom
  • 这主要是因为您从ga切换到FINAL版本。有关这些版本之间的差异进一步的解释,你可以检查this SO questionthis one

作为一个方面说明,我觉得有点不一致,改变版本号也改变了依赖型,它可能在争论点,但如果我是Hibernate团队,我会以不同的方式处理这个版本管理。

+0

我只是补充说,Hibernate不仅是一个jar,它被打包成多个JAR。不过,在大多数情况下使用'hibernate-core'依赖/ jar就足够了。 –

+0

我们使用hibernate-core等标注。我试图更新与休眠相关的所有内容。我一直在做的是每个我看到的Hibernate神器,我正在采用我认为的最新版本,它在MVN中心版本中是稳定版本。这是不是正确的方法? –

+0

我已经添加了以上的错误。如果这是一个POM项目,为什么它要找一个罐子呢?更新我列出的每一个hibernate工件的最佳方法是什么? –