Maven Artifact Resolver 在我的机器上的 Maven Central 上看不到最新插件

2024-05-13

我在 Windows 10 上使用 Maven 3.9.1。我还使用 Eclipse EE 2023-03,其中包含 m2e(Eclipse 对 Maven 的支持)。我正在使用 POM 检查插件版本更新版本 Maven 插件 https://www.mojohaus.org/versions/versions-maven-plugin/,但即使其他人在检查同一个 POM 时在 Maven Central 中看到可用的更新,许多也没有出现。正在讨论这个问题版本 Maven 插件问题 #959 https://github.com/mojohaus/versions/issues/959,但我在这里发布这个问题是希望更广泛的受众能够阐明为什么 Maven 会“卡住”只看到旧版本。

我从this pom.xml https://github.com/globalmentor/globalmentor-root/blob/bce5bdbac7797b5b9114a72e5da2f4d76f3e24a7/pom.xml,它使用org.codehaus.mojo:versions-maven-plugin:2.12.0,这反过来(我被告知)使用Maven 工件解析器 https://maven.apache.org/resolver/。 (请注意,我已经尝试过最新的org.codehaus.mojo:versions-maven-plugin:2.15.0以及,结果相同。我使用这个 POM 是因为它可以在线获取,并且不包含任何会导致混淆的版本;最初我以为这是问题所在问题 #959 https://github.com/mojohaus/versions/issues/959,但事实并非如此。)

我想看看哪些插件已经过时,所以我运行了:

mvn versions:display-plugin-updates

它显示了这一点:

[INFO] The following plugin updates are available:
[INFO]   maven-failsafe-plugin .......................... 2.22.2 -> 3.0.0-M7
[INFO]   maven-release-plugin ............................ 2.5.3 -> 3.0.0-M6
[INFO]   maven-site-plugin .............................. 3.12.1 -> 4.0.0-M3
[INFO]   maven-surefire-plugin .......................... 2.22.2 -> 3.0.0-M7
[INFO]   org.springframework.boot:spring-boot-maven-plugin .. 2.7.3 -> 3.0.5

然而在问题 #959 https://github.com/mojohaus/versions/issues/959,其他人运行相同的命令并得出不同的答案。下面是两个例子:

[INFO]   org.springframework.boot:spring-boot-maven-plugin .. 2.7.3 -> 3.1.0

请注意,我的输出仅显示 v3.0.5 适用于org.springframework.boot:spring-boot-maven-plugin。此外,其他一些插件也有可用的更高版本。

[INFO]   com.akathist.maven.plugins.launch4j:launch4j-maven-plugin  2.1.3 -> 2.4.1

我的输出甚至没有显示com.akathist.maven.plugins.launch4j:launch4j-maven-plugin;显然它认为当前的 v2.1.3 是最新可用的!

Maven Resolver 似乎在某个较早的时间点以某种方式“卡住”了。

我用以下命令运行 Maven-X选项,这是与相关的输出的一部分com.akathist.maven.plugins.launch4j:launch4j-maven-plugin:

…
[DEBUG] Checking com.akathist.maven.plugins.launch4j:launch4j-maven-plugin for updates newer than 2.1.3
[DEBUG] Could not find metadata com.akathist.maven.plugins.launch4j:launch4j-maven-plugin/maven-metadata.xml in local (C:\Users\user\.m2\repository)
[DEBUG] Skipped remote request for com.akathist.maven.plugins.launch4j:launch4j-maven-plugin/maven-metadata.xml, locally cached metadata up-to-date
[DEBUG] [com.akathist.maven.plugins.launch4j:launch4j-maven-plugin].version=2.1.3
[DEBUG] [com.akathist.maven.plugins.launch4j:launch4j-maven-plugin].artifactVersion=2.1.2
[DEBUG] [com.akathist.maven.plugins.launch4j:launch4j-maven-plugin].effectiveVersion=2.1.3
[DEBUG] [com.akathist.maven.plugins.launch4j:launch4j-maven-plugin].specified=true
…

这个debug信息好像是说找不到C:\Users\user\.m2\repository\com\akathist\maven\plugins\launch4j\launch4j-maven-plugin\maven-metadata.xml。事实上该文件不存在!相反,我有C:\Users\user\.m2\repository\com\akathist\maven\plugins\launch4j\launch4j-maven-plugin\maven-metadata-central.xml。 (我不知道有什么区别。)

更不祥的一行是这一行:

[DEBUG] Skipped remote request for com.akathist.maven.plugins.launch4j:launch4j-maven-plugin/maven-metadata.xml, locally cached metadata up-to-date

是什么可能导致我的机器上的 Maven Resolver 在较早的时间点“卡住”,和/或完全跳过检查 Maven Central 是否有许多插件的较新版本?

(请注意,我不想删除整个C:\Users\user\.m2\repository\目录树,或者以其他方式“强制”Maven Resolver 联系远程存储库。我更愿意首先了解导致当前行为的原因,以便我可以调查为什么会首先发生这种情况,以防止将来再次发生。)


事实证明,这种情况发生在某些情况下,其中某些工具或插件明显使用Maven兼容 https://maven.apache.org/ref/3.9.2/maven-compat/会更新状态文件resolver-status.properties对于本地存储库中的工件,但使用central.maven-metadata-central.xml.lastUpdated财产而不是(如果我没记错的话)lastUpdated财产。在这之后Maven 工件解析器 https://maven.apache.org/resolver/会出现但找不到lastUpdated它期望的属性,而不是说“我不知道它上次更新是什么时候,所以让我们更新它”,而是说“我不知道它上次更新是什么时候,所以我假设它永远不应该更新”。

当发生这种情况时,该工件将永远“锁定”在单个版本,并且版本 Maven 插件将永远不会看到任何更高版本,因为 Maven Artifact Resolver 永远不会再次检查。一种解决方法是使用-U使用版本 Maven 插件强制更新。

大多数人无法重现这一问题的原因是,他们是从一个空的本地存储库开始的,或者至少是一个在使用使用不同的上次更新属性的不同工具/插件之前从未检查过 Maven Central 是否有问题的工件的存储库。

对此问题进行了进一步的调查和分析MRESOLVER-363 https://issues.apache.org/jira/browse/MRESOLVER-363,但团队的最新评估是,这不是一个错误,并且正在按设计运行。

然而,即将发布的版本 Maven 插件(请参阅请求请求 #957 https://github.com/mojohaus/versions/pull/957)将包括对默认策略的覆盖,以允许 Maven Artifact Resolver 识别出即使在这种情况下它也应该继续检查 Maven Central 是否有更新。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Maven Artifact Resolver 在我的机器上的 Maven Central 上看不到最新插件 的相关文章

随机推荐