如何防止 Maven 为我的仓库中已有的工件下载 maven-metadata.xml?
Posted
技术标签:
【中文标题】如何防止 Maven 为我的仓库中已有的工件下载 maven-metadata.xml?【英文标题】:How do I prevent Maven from downloading maven-metadata.xml for an artifact that I already have in my repo? 【发布时间】:2014-12-20 18:15:35 【问题描述】:我使用的是 Maven 3.2。我的 pom.xml 文件(一个 WAR 项目)中有这个依赖项
<dependency>
<groupId>joda-time</groupId>
<artifactId>joda-time</artifactId>
<version>1.6.2</version>
<scope>provided</scope>
</dependency>
每当我为我的 pom 运行任何阶段(例如“mvn install”)时,应用程序总是会尝试下载一些有关依赖项的元数据……
Downloading: http://repo.spring.io/milestone/joda-time/joda-time/maven-metadata.xml
我如何告诉 Maven 停止这样做?我已经在本地 Maven 存储库中缓存了工件。
谢谢,- 戴夫
【问题讨论】:
你读过Introduction to the Dependency Mechanism吗?也许 Transitive Dependencies 适用于此。 或者是为了提醒您查看.xml
发现joda-time
1.6.2 已经有四年了,最新版本是2.5。 ;-)
检查存储库的配置并查看是否以任何方式设置了 updatePolicy。
我的任何存储库中都没有“updatePolicy”设置。另外,我不得不使用旧的 joda-time,因为那是 JBoss 7.1.3.Final 正在使用的版本。
添加存储库配置(可能来自settings.xml
)肯定有助于解决问题。
【参考方案1】:
也许需要明确指定更新策略。看到这个答案:Why is Maven downloading the maven-metadata.xml every time?
<pluginRepositories>
<pluginRepository>
<id>central</id>
<url>http://gotoNexus</url>
<snapshots>
<enabled>true</enabled>
<updatePolicy>daily</updatePolicy>
</snapshots>
<releases>
<enabled>true</enabled>
<updatePolicy>never</updatePolicy>
</releases>
</pluginRepository>
【讨论】:
如果您在同一天构建两个或更多快照会怎样? 这在我的情况下不起作用。我的 POM 中有两个存储库,第一个从超级 POM 重复 Maven Central 定义,以便首先找到它(因为在项目 POM 中定义的存储库在来自超级 POM 的存储库之前被查询)。尽管如此,即使 Central 包含我的工件,它们已经在本地缓存,我将更新策略配置为从不甚至用特定版本替换我的版本范围,始终下载来自自定义存储库的元数据。我的 settingx.xml 中没有存储库。 好的,它确实有效。起初我没有意识到的是,我自己的 POM 没有版本范围,但一些传递的有。我不得不在我的 POM 的dependencyManagement
部分修复他们的版本,然后最后 Maven 停止尝试下载元数据文件。我写这篇文章是为了让大家遇到同样的情况,而不是仅仅删除我之前的评论。【参考方案2】:
这意味着在您的依赖关系树中的某个地方使用了 SNAPSHOT 或版本范围(直接或作为传递依赖项)。对于这两种情况,解决方案是相同的:将版本锁定到特定版本。你是把它锁定为直接依赖还是在dependencyManagement中?
【讨论】:
就我而言,aws-java-sdk-core 依赖于使用版本范围的 joda-time。排除来自 aws-java-sdk-core 的依赖项并直接在我的 POM 中包含锁定版本的 joda-time 解决了此问题。 与版本范围的传递依赖是我的问题,在接受的答案下查看我的 cmets。感谢您的回答,这对我弄清楚发生了什么很有帮助。以上是关于如何防止 Maven 为我的仓库中已有的工件下载 maven-metadata.xml?的主要内容,如果未能解决你的问题,请参考以下文章
如何让工件更新虚拟仓库的 maven-metadata.xml?