Maven 更新 POM 中的依赖项

Posted

技术标签:

【中文标题】Maven 更新 POM 中的依赖项【英文标题】:Maven update dependencies in POM 【发布时间】:2010-11-01 15:58:41 【问题描述】:

是否有任何预先存在的 Maven 插件或命令来更新 POM 中的依赖项? 示例:(如果这是在我的 POM 中)

<dependency>
    <groupId>commons-lang</groupId>
    <artifactId>commons-lang</artifactId>
    <version>2.3</version>
</dependency> 

是否有我可以运行的命令或插件将依赖项更新为:

<dependency>
    <groupId>commons-lang</groupId>
    <artifactId>commons-lang</artifactId>
    <version>2.4</version>
</dependency> 

【问题讨论】:

如果插件能够简单地检查更新并通知我,我会非常高兴。对新版本插件的同样检查也很简洁。 我一直在想,这可能是我将要构建的 Mojo 的目标之一。 【参考方案1】:

试试maven-versions-plugin,尤其是versions:use-latest-versions 目标。

【讨论】:

这可以满足发帖者的要求,尽管我认为 use-latest-releases 在大多数情况下会更好。但这绝对是要使用的插件。 当,现在我已经构建了它!我想俗话说,“除非你想了解很多关于***的知识,否则不要重新发明***”。 :) 谢谢! 是的——我错过了使用最新版本。谢谢,扎克。 如果您只需要获取公司库的最新版本,您可以使用以下 Maven 属性来实现:-Dincludes=com.mycompany:*【参考方案2】:

我更喜欢使用mvn versions:display-dependency-updates;这会生成一份报告,说明哪些依赖项可以升级,但允许您自己修改 POM。还有一个用于插件的 display-plugin-updates 命令。

【讨论】:

为我工作!出于某种原因,该链接总是将我带到 mojo 主页,我将在此处粘贴链接:mojohaus.org/versions-maven-plugin/… 谢谢,我已经用流亭的新链接修复了链接。【参考方案3】:

我个人认为maven中应该有一个额外的参数可以让你添加到pom.xml中。

查看http://maven.40175.n5.nabble.com/Is-there-any-maven-plugin-to-add-dependency-to-existing-pom-xml-td2839092.html#a5772853的帖子

在这里,您可以将以下内容添加到您的 pom.xml 文件中:

<project>
  ...
  <build>
    ...
    <plugins>
      ...
      <plugin>
        <groupId>org.codehaus.mojo</groupId>
        <artifactId>versions-maven-plugin</artifactId>
        <version>2.1</version>
      </plugin>
      ...
    </plugins>
    ...
  </build>
  ...
</project>

...

然后通过版本设置命令备份你的 pom.xml 文件:

mvn versions:set -DnewVersion=9.9.9

运行最新版本:

mvn versions:use-latest-versions

并区分 pom.xml 文件 pom.xml 和 pom.xml.versionsBackup

【讨论】:

【参考方案4】:

你可以在你的父 pom 中使用dependencyManagement:

<dependencyManagement>
      <dependencies>
          <dependency>
              <groupId>commons-lang</groupId>
              <artifactId>commons-lang</artifactId>
              <version>2.4</version>
          </dependency>
      </dependencies>
</dependencyManagement>

这样,您只需在父 POM 中更改一次版本

【讨论】:

这比以您可能或可能无法控制的方式进行一些工具更新更可取。您还保证所有孩子都将使用指定的版本。 @MikePone 取决于用例 - 有一些有效的,就像部署 pom 需要始终使用您自己的工件的最新版本,这是一个常见的需求。一般来说,当然,你是对的。【参考方案5】:

不,没有。并且很高兴没有。这样的工具如何知道如何升级您的依赖项?

由于次要版本之间可能发生损坏,这将是一场等待发生的灾难。


但您始终可以为此 write your own Mojo。

从 Maven 存储库获取最新版本的依赖项 与 pom.xml 中的版本比较 重写 pom.xml 运行mvn test ? 利润!

【讨论】:

我有点想这就是结果 - 我一直在寻找一个 Mojo 项目来做,谢谢。 这总是一件好事。如果您决定采用开源方式,请务必发布链接。 这可能曾经是正确的,但现在不再正确(@Robert:建议您完善您的答案?)。 @Andrew:接受的答案是正确的,所以我不会只是复制它。我仍然觉得创造这样的马具会很有趣。 在 npm 之类的时代,这个问题并不牵强。

以上是关于Maven 更新 POM 中的依赖项的主要内容,如果未能解决你的问题,请参考以下文章

如何找出是不是在 Maven 应用程序中使用了依赖项中的任何类?

Intellij idea 无法解决 maven 中的任何问题

Maven 更新 POM 中的依赖项

依赖项中的 JUnit 版本错误

可以使Maven构建包含依赖项中的.class文件[重复]

为啥即使我的 maven 依赖项中有第三方依赖项,也只需要 OSGi 容器中的第三方依赖项?