当前位置: 首页 > 知识库问答 >
问题:

新的maven依赖版本拉pom,不jar进入私有nexus回购?

景书
2023-03-14

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

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

Hibernate最新发布稳定版

当我运行maven install时,我在nexus服务器中看到现在列出了3.5.4-final,但是在它的目录中只有一个项目的pom.xml文件,而且没有一个与JAR相关联的文件。

编辑-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个答案

百里意智
2023-03-14

正如您提供的链接中所提到的

Hibernate核心模块的聚合器。

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

默认情况下,依赖项具有jar类型,因此如果您为一个依赖项添加maven坐标(GAV),而不是pom类型,maven将把它作为jar来查找。所以这就是为什么你会在编辑中得到提到的错误。

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

更新
根据您最新的评论和反馈,下面是关于为什么只更改现有Hibernate依赖项的版本就会出现这个问题的进一步解释:

  • 新的3.5.4-final版本和以前的3.2.7.ga版本在Maven存储库中共享相同的groupidartifactid
  • 但是,前者具有pom类型(它是一个pom文件),而后者具有jar类型(默认)
  • 所以,以前存在的版本运行良好,并更改了依赖项的版本,您将其从jar切换到pom,打破了maven的解决方案(为一个版本寻找jar,而该版本是pom)
  • 这主要是因为您从GA切换到了final版本。有关这些版本之间差异的进一步解释,您可以检查这个SO问题和这个

顺便说一句,我发现更改版本号也会更改依赖类型这一点有点不一致,这可能是一个争论点,但如果我是Hibernate团队的成员,我会以不同的方式处理这个版本管理。

 类似资料:
  • 考虑到我有依赖项groupId和artifactId,我如何从pom中提取这个依赖项的版本。xml文件? 示例:如果我使用artifactId和groupId进行查询,我希望能够提取下面的依赖项版本。 我想将版本分配给一个全局环境变量,即DEP_version=1.6

  • 问题内容: 最近,我一直在研究前一段时间开发的项目中的一些改进,这就是我所发现的。pom文件中的许多依赖项都没有指定版本,但是已经解决了。该项目包含1个根模块和2个子模块。使用了Aggregator模式,这意味着根本没有dependencyManagement部分。上层项目仅聚合了2个模块,仅此而已。子项目并不将其称为父项。他们有不同的父母。我无法理解的是,子项目本身或它们的父项(事实上,它也没有

  • 问题内容: 是否有任何预先存在的Maven插件或命令来更新POM中的依赖关系?示例:(如果这是在我的POM中) 有没有可以运行的命令或插件来将依赖关系更新为: 问题答案: 尝试使用maven-versions-plugin,尤其是versions:use-latest-versions目标。

  • 我想知道以下jar的所有传递依赖项: 将经典命令移动到pom。项目定义依赖关系和输入的xml: mvn依赖:树 将显示: 我没看到魔咒父母: 乍一看,mvn命令似乎可以显示非pom类型的依赖项。 有没有一种方法可以精确地显示使jar保持活动状态所需的每个文件? 谢谢

  • 我们的结构如下: 在我们的通用api中,我们定义了protobuf消息,还定义了帮助器类和类型,并希望其他人使用它们。 当我们向客户提供common-api.jar时,他们还需要两个父pom(pom2和pom1),以便在他们自己的maven服务器上重新部署它们。 一种向他们提供POM的方法,我们可以公开我们的maven存储库,至少是所需的部分,但不幸的是,目前这不是一个选项。 有没有办法自动创建公

  • MVNRepository通常为每个依赖项列出“版本”和“更新”。 如果我发布自己的包,如何指定“更新”版本 Maven在解决传递依赖时使用了哪个依赖项?所以如果我的包依赖于包A,它依赖于包B,版本=1.0,更新=1.1。我会得到哪个版本的B?