Maven 检查存储库中更新的依赖项

Posted

技术标签:

【中文标题】Maven 检查存储库中更新的依赖项【英文标题】:Maven check for updated dependencies in repository 【发布时间】:2016-03-05 21:07:48 【问题描述】:

是否有 Maven 插件可以让您检查存储库中是否有更新版本的依赖项可用?

假设您使用的是 1.2 版本的依赖项 X。现在,X 的新版本与 1.3 版本一起发布。我想知道,根据我项目中使用的依赖项,哪些依赖项有更新的版本可用。

【问题讨论】:

相关问题:***.com/questions/431332. 【参考方案1】:

Maven Versions plugin 和 display-dependency-updates mojo 是您正在寻找的:

mvn versions:display-dependency-updates

这是输出的样子:

[INFO] ------------------------------------------------------------------------
[INFO] Building Build Helper Maven Plugin
[INFO]    task-segment: [versions:display-dependency-updates]
[INFO] ------------------------------------------------------------------------
[INFO] [versions:display-dependency-updates]
[INFO]
[INFO] The following dependency updates are available:
[INFO]   org.apache.maven:maven-artifact ........................ 2.0 -> 2.0.9
[INFO]   org.apache.maven:maven-plugin-api ...................... 2.0 -> 2.0.9
[INFO]   org.apache.maven:maven-project ....................... 2.0.2 -> 2.0.9
[INFO]   org.codehaus.plexus:plexus-utils ....................... 1.1 -> 1.5.6
[INFO]
[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESSFUL
[INFO] ------------------------------------------------------------------------
[INFO] Total time: 17 seconds
[INFO] Finished at: Fri Aug 15 10:46:03 IST 2008
[INFO] Final Memory: 10M/167M
[INFO] ------------------------------------------------------------------------

【讨论】:

谢谢帕斯卡。这就是我一直在寻找的。不过,对于 Spring 版本 3.0.1.RELEASE,它会报告更新的 2.5.6 版本。可能是插件中的错误? @Felix 不客气。关于Spring神器,不知道是不是因为Spring没有关注"the rule":版本应该是3.0.1-RELEASE,而不是3.0.1.RELEASE。换句话说,我不确定这是一个错误(我的意思是,当然,我希望插件也将 3.0.1.RELEASE 报告为更新,但我不确定这是否会被接受为错误)。 检查更新maven-plugin-api 也可用于检查 Maven 本身的较新版本,因为每个 Maven 版本都会发布此依赖项的新版本。 很高兴知道。但是,有没有办法在我们构建项目时获得此报告,而不必显式键入该命令? 如何让它只告诉我可以更新的直接依赖项?我不想被告知我可以更新的所有传递依赖项......【参考方案2】:

理想的方法是将依赖版本设置为 pom.xml 中的属性,然后运行以下命令以获取特定/自定义依赖项的更新版本。

<properties>
    <java.version>1.8</java.version>
    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
    <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
    <skip.tests>true</skip.tests>
    <spring-cloud-gcp.version>1.2.3.RELEASE</spring-cloud-gcp.version>
    <spring-cloud.version>Hoxton.SR6</spring-cloud.version>
    <spring-cloud-stream-schema.version>2.2.1.RELEASE</spring-cloud-stream-schema.version>
    <confluent.version>5.5.1</confluent.version>
    <avro.version>1.10.0</avro.version>
    <janino.version>3.1.2</janino.version>
    <swagger.version>2.9.2</swagger.version>
    <google-cloud-logging-logback.version>0.118.1-alpha</google-cloud-logging-logback.version>
    <spring-cloud-stream-binder-kafka.version>3.0.6.RELEASE</spring-cloud-stream-binder-kafka.version>
</properties>
mvn versions:display-property-updates


[INFO] The following version properties are referencing the newest available version:
[INFO]   $avro.version .............................................. 1.10.0
[INFO]   $spring-cloud-stream-schema.version ................. 2.2.1.RELEASE
[INFO]   $janino.version ............................................. 3.1.2
[INFO] The following version property updates are available:
[INFO]   $spring-cloud-gcp.version .......... 1.2.3.RELEASE -> 1.2.5.RELEASE
[INFO]   $google-cloud-logging-logback.version  0.118.1-alpha -> 0.118.2-alpha
[INFO]   $spring-cloud-stream-binder-kafka.version  3.0.6.RELEASE -> 3.0.8.RELEASE
[INFO]   $confluent.version ................................. 5.5.1 -> 6.0.0
[INFO]   $swagger.version ................................... 2.9.2 -> 3.0.0
[INFO]   $spring-cloud.version .................... Hoxton.SR6 -> Hoxton.SR8
[INFO] 
[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESS
[INFO] ------------------------------------------------------------------------
[INFO] Total time:  3.572 s
[INFO] Finished at: 2020-10-06T09:35:08-07:00
[INFO] ------------------------------------------------------------------------

实现此目的的另一种方法是执行命令mvn versions:display-dependency-updates,但我使用这种方法面临的问题是它还显示了对我不太有用的嵌套依赖项的更新。

【讨论】:

【参考方案3】:

在具有大量依赖项的项目中,您有时会将版本保存在属性部分中。

    <properties>
        <assertj.version>3.15.0</assertj.version>
        <aws-sdk.version>1.11.763</aws-sdk.version>
        <cxf.version>3.3.6</cxf.version>

如果您只对这些版本的更新感兴趣,可以使用以下命令

mvn versions:display-property-updates

这提供了一个更简洁的视图,并且只返回您需要在属性部分更新的版本。

【讨论】:

被低估的答案。 这似乎遗漏了我定义版本的 90% 的属性。【参考方案4】:

VersionEye Maven 插件也在做同样的事情:versioneye_maven_plugin。

VersionEye 也可以通知您有关 Maven 存储库的新版本。它是一种与语言无关的工具,除了 Java 之外,它还支持 7 种其他语言。除了简单的关注/通知功能外,它还可以直接监控 GitHub 和 BitBucket 存储库,并通知您项目中过时的依赖项。

还有一个REST JSON API,用于工具集成。

顺便说一句,我是发起这个项目的人。如果您有任何问题,请告诉我。

【讨论】:

项目关闭:(【参考方案5】:

如果您想在 Maven Central 上提供更新的工件版本时收到电子邮件通知,您可以在 artifact-listener 上创建一个帐户并选择您要关注的工件。 您可以手动搜索工件或直接上传您的 pom.xml。

您会定期收到类似这样的通知(目前有英文和法文版本):

【讨论】:

【参考方案6】:

您可以使用版本 Maven 插件 [1] 在您的 Maven 站点中生成报告,以获取可能的更新列表。关于 Spring 的不规则性,它似乎使用了 Mercury 版本控制系统[2]。在配置 Versions 插件时,你可以为 Spring 的东西添加一个特殊的规则:

    http://mojo.codehaus.org/versions-maven-plugin/ http://docs.codehaus.org/display/MAVEN/Mercury+Version+Ranges

【讨论】:

你能举个例子吗?

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

Maven:包括在公共存储库中找不到的 jar

如何从 Maven 存储库中清除旧的依赖项?

将所有 Maven 依赖项下载到不在存储库中的目录?

如何从maven存储库中清除旧的依赖项?

Gradle在本地Maven存储库中找不到现有的依赖项

如何强制 IntelliJ 中的 Maven 从本地 .m2 存储库中提取特定依赖项