我自己的 Maven 插件如何获得 Maven 工件的可用版本?

Posted

技术标签:

【中文标题】我自己的 Maven 插件如何获得 Maven 工件的可用版本?【英文标题】:How can my own Maven plugin get the available versions of a Maven artifact? 【发布时间】:2018-11-24 07:46:03 【问题描述】:

我正在为 Maven 编写一个插件,并且需要能够确定哪些版本可用于任何给定的 Maven 工件。 maven-metadata.xml 文件包含此信息,但我不知道如何从我的插件中访问它。

我尝试使用myArtifact.getAvailableVersions(),但它只返回null。我怎样才能做到这一点?

【问题讨论】:

您为什么要尝试自己实现插件?确定哪些版本可用的目的是什么? 给定一个 Maven 工件,我希望能够在运行时找到它的所有其他次要版本。稍后在插件中这将是必要的(它做的事情比我在这里所说的要多)。你知道有什么方法可以实现吗? 在运行时查找所有次要版本,您指的是在插件运行时...问题是您希望通过这些信息实现什么? 是的,我指的是我们插件的运行时。我无法透露插件的用途,但它必须包含此处描述的功能。 【参考方案1】:

所有可用版本可能意味着不同的东西:

如果您正在寻找已在Maven central 上发布的工件的所有可用版本,您可以使用他们的search api 来获取这些版本。 REST 调用 https://search.maven.org/solrsearch/select?q=g:"org.apache.tamaya"+AND+a:"tamaya-core"&core=gav&rows=20&wt=json 将返回一个 json 文档,其中包含 tamaya-core 工件的所有可用版本。将 tamaya-core 的 group id 和 artifact id 替换为您的 artifact 的数据,您将获得请求的数据。 如果请求的工件仅在您组织的私有存储库中可用,如果有类似的 REST API 可用,请检查您的存储库的文档。例如,如果您使用 Sonatype Nexus,则描述 REST api here。 如果工件仅在您计算机上的本地 Maven 存储库中可用(这意味着它从未被部署),您可以直接检查文件系统。

【讨论】:

以上是关于我自己的 Maven 插件如何获得 Maven 工件的可用版本?的主要内容,如果未能解决你的问题,请参考以下文章

如何升级 maven 插件的版本?

Maven 构建生命周期

如何清理 Maven 插件绑定?

Maven:如何防止 exec 插件显示其堆栈跟踪?

Tomcat7 Maven 插件和 JaCoCo

Maven实战与原理分析:maven 自定义插件开发实战