Maven检查仓库中更新的依赖项。

207

有没有一个 Maven 插件可以检查仓库中是否有更新版本的依赖可用?

比如说,你正在使用版本为 1.2 的 X 依赖。现在 X 的新版本 1.3 发布了,我希望能够根据项目中使用的依赖项,知道哪些依赖有可用的更新版本。


相关问题:https://dev59.com/_XRC5IYBdhLWcg3wCMg6. - Sergey Vyacheslavovich Brunov
8个回答

340

你需要的是Maven版本插件及其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] ------------------------------------------------------------------------

谢谢Pascal。这正是我在寻找的。不过,对于Spring版本3.0.1.RELEASE,它报告了一个更新版本2.5.6。也许是插件中的一个错误? - froethen
1
@Felix 不用谢。关于 Spring 构件,我想知道问题是否是因为 Spring 没有遵循"规则",版本应该是 3.0.1-RELEASE,而不是 3.0.1.RELEASE。换句话说,我不确定这是否是一个 bug(我的意思是,当然,我期望插件也报告 3.0.1.RELEASE 是更新的,但我不确定这会被接受为一个 bug)。 - Pascal Thivent
1
检查更新maven-plugin-api也可以用于检查Maven本身的新版本,因为每个Maven发布都会发布此依赖项的新版本。 - Tunaki
知道这点很好。但是,有没有一种方法可以在构建项目时自动生成此报告,而不必显式输入该命令? - Frederic
1
我该如何让它只告诉我可以更新的直接依赖项?我不想被告知所有可更新的传递依赖项... - ArtOfWarfare
警告:如果你有一个大项目,这将需要很长时间。 - TheRealChx101

38

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

您将定期收到类似于以下通知的通知(目前仅提供英文和法文):

Maven artifact listener


36

在有很多依赖关系的项目中,有时会将版本号保存在属性部分。

    <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

这将提供更紧凑的视图,仅在属性部分返回需要更新的版本。


4
被低估的答案。 - ROMANIA_engineer
这似乎错过了我定义版本的90%属性。 - ArtOfWarfare
@ArtOfWarfare 另外,对于使用Spring等依赖项的项目 - TheRealChx101

22

VersionEye Maven插件也是如此:versioneye_maven_plugin

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

enter image description here

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

顺便说一下,我是开始这个项目的那个人。如果你有问题,请告诉我。


3
项目已关闭 :( - Alireza Fattahi

14
在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

2
你能提供一个例子吗? - Zarathustra

1

我可能有点晚加入这个派对,但更清晰的方法是使用以下方式获取更易读的HTML文件或XML文件作为报告,以便进行进一步的自动化:

mvn versions:dependency-updates-report

这个报告插件不仅显示更新的综合详细信息,而且还具有升级到最新版本的选项。您可以找到文档来使用各种参数。


0
你可以使用命令行工具Maven Check,它是独立的,不像Versions Maven Plugin。 它还可与Gradle项目一起使用。
输出示例:
2 build file(s) found, checking for artifact updates

my-gradle-project\build.gradle
[COMPILE ONLY] com.google.guava:guava 31.0-android -> 31.1-android
1 artifact update(s) available

my-maven-project\pom.xml
[DEPENDENCY] org.apache.commons:commons-lang3 3.10 -> 3.12.0
[BUILD PLUGIN] org.apache.maven.plugins:maven-compiler-plugin 3.10.0 -> 3.10.1
2 artifact update(s) available

2/2 build file(s) checked, 3 artifact update(s) available

免责声明:本人是 Maven Check 的作者。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接