如何强制Maven更新?


730

我将已经工作的项目导入另一台计算机,并且开始下载依赖项。

显然我的互联网连接崩溃了,现在我得到了以下信息:

    >Build errors for comics; org.apache.maven.lifecycle.LifecycleExecutionException:
    Failed to execute goal on project comicsTest: Could not resolve dependencies for project comicsTest:comicsTest:war:0.0.1-SNAPSHOT:
    The following artifacts could not be resolved:
    org.springframework:spring-context:jar:3.0.5.RELEASE,
    org.hibernate:hibernate-entitymanager:jar:3.6.0.Final,
    org.hibernate:hibernate-core:jar:3.6.0.Final,
    org.hibernate:hibernate-commons-annotations:jar:3.2.0.Final,
    org.aspectj:aspectjweaver:jar:1.6.8,
    commons-lang:commons-lang:jar:2.5,

    >mysql:mysql-connector-java:jar:5.1.13: Failure to transfer org.springframework:spring-context:jar:3.0.5.RELEASE from http://repo1.maven.org/maven2 was cached in the local repository, resolution will not be reattempted until the update interval of central has elapsed or updates are forced.

    >Original error: Could not transfer artifact org.springframework:spring-context:jar:3.0.5.RELEASE from central (http://repo1.maven.org/maven2): No response received after 60000

如何强制Maven更新?


旁注:Atlassian Maven(来自插件SDK)存在此问题,升级到较新版本可以解决此问题。
Wirone

Answers:


1596
mvn clean install -U

-U表示强制更新快照依赖项。发布依赖项无法通过这种方式进行更新。


32
我同意lwpro2,这也解决了我的问题。仅仅做mvn清洁还不够。Navi的答案不足以解决问题。
R. van Twisk

1
我相信如果您使用人工制品并使用存储库ID“中央”,这会更加复杂,因为元数据显然并没有被清除。
ggb667 2014年

2
这似乎并没有真正更新快照依赖项jar,而只是更新了元数据。
冰冻豌豆的罗迪(Roddy of the Frozen Peas)2015年

如果它是由最后一次不成功的依赖项下载生成的.lastupdated文件引起的,则此方法将不起作用,我们需要类似Rober Reiz的答案
Junjun Liu

1
我正在查看以前版本以及maven 2.0.4之前的帮助,-U标志的描述为:“ -U,-update-snapshots更新所有快照,而不考虑存储库策略”,从2.0.5开始,它变成:“ -U,-update-snapshots强制检查远程存储库上的更新的发行版和快照”从那时起就一直如此。这两个版本均于2007年发布。我想知道是否也必须对答案进行编辑以说明这些版本吗?
cleberz

93

如果你的本地仓库被莫名其妙地打乱了发布罐子,而不是快照(-U--update-snapshots只更新快照),可以使用以下清除当地的回购协议:

 mvn dependency:purge-local-repository

然后,您可能想要再次清洁并安装:

 mvn dependency:purge-local-repository clean install

有关更多信息,请访问https://maven.apache.org/plugins/maven-dependency-plugin/examples/purging-local-repository.html


8
我一完成mvn dependency:purge-local-repository,它就再次重新下载了所有依赖项,这正是我想要的
smac89 '18

92

-U 似乎强制更新所有依赖项。

如果要不清理就更新单个依赖项,或者-U可以从本地存储库中删除它,然后进行构建。

以下示例用于更新slf4j-api 1.7.1-SNAPSHOT

rm -rf ~/.m2/repository/org/slf4j/slf4j-api/1.7.1-SNAPSHOT
mvn compile

如果您正在使用maven以外的其他工具引用本地maven存储库,则此方法会很好地工作。
Mansoor Siddiqui

57

这里所有的答案对我都不起作用。我用锤子法:

find ~/.m2/ -name "*.lastUpdated" | xargs rm

解决了问题:-)


@ DJ2这会删除所有文件.m2-directory命名*.lastUpdated
sjngm

find ~/.m2/ -name "*.lastUpdated" -delete将不会有危险xargsrm超出某些限制(如果找到许多文件)。
Sz

45

您可以有效地做到Eclipse IDE。当然,如果您正在使用它。

Project_Name->Maven->Update Project Configuration->Force Update of Snapshots/Releases

1
我在@ lwpro2的答案中做了命令行版本,这使我可以在命令行上进行构建,但是后来我仍然无法在Eclipse中进行构建。这样做使它可以通过Eclipse构建。

仅当我在执行更新后关闭并重新打开Eclipse时,对我有用。
ceklock

33

万一有人只想更新项目的快照依赖项,而又不想安装工件,以防万一:

mvn dependency:resolve -U

不要忘记在您的IDE中重新导入依赖项。在IDEA中,您需要右键单击pom文件,然后选择Maven->重新导入


13

如果您不确定本地存储库中的内容,建议您使用以下选项触发构建:

-Dmaven.repo.local=localrepo

这样,您将确保在洁净室环境中进行构建。


5
此命令意味着使用文件夹localrepo作为本地存储库。这对于单个项目工作区来说是好的,但是如果您有多个项目,而很少依赖另一个项目,那就不好了。那么您最好提供一个完整的路径,例如-Dmaven.repo.local = / data / my / localrepoDir
tgkprog

9

就我而言,我首先要做的是:

mvn clean install -U

仍然显示相同的错误,然后我关闭了项目,然后再次将其重新打开。终于工作了。


我认为您可以重新导入依赖项以避免重新打开该项目
GlaIZier

4

如果您使用的是eclipse IDE,则:

  • 选择项目。
  • 按ALT + F5,将弹出“更新Maven项目”窗口。

  • 选中-强制更新快照/发行版,然后单击确定。

如果使用Intellij IDE

  • 转到设置/ Maven
  • 选中始终更新快照

3

我使用了IntelliJ IDE,并且遇到了类似的问题,并且解决了我在Maven选项卡中单击“生成所有项目的源和更新文件夹”的问题。

在此处输入图片说明


2

我在其他情况下遇到了错误。因此,我的解决方案可能对那些讨厌这个问题的人有用:

问题:我已将本地存储库复制到另一台计算机,该计算机与特殊存储库没有连接。因此,maven尝试根据无效的存储库检查工件。

我的解决方案:删除_maven.repositories文件。


2

这是有关Maven的最烦人的事情之一。对我而言,会发生以下情况:如果我添加了一个请求更多依赖项的依赖项,但连接速度较慢,则它在下载和超时时似乎停止了。在超时之前,所有尚未获取的依赖项都在.m2缓存中标记为占位符,除非我通过删除它从缓存中删除占位符条目(如其他所述),否则Maven不会(永远)选择它。

就我所知,Maven或更确切地说是Eclipse Maven插件存在一个与此有关的错误。有人应该举报。



1

我在android-maps-utils依赖项中遇到了同样的错误。在依赖项部分使用aar类型包解决了我的问题。默认情况下,类型为jar,因此可以检查是否下载了存储库中的依赖关系类型。


1

要从Eclipse解决此问题:

1)在Maven pom.xml中添加以下依赖项并保存pom.xml文件。

<!-- https://mvnrepository.com/artifact/com.thoughtworks.xstream/xstream -->
<dependency>
    <groupId>com.thoughtworks.xstream</groupId>
    <artifactId>xstream</artifactId>
    <version>1.3.1</version>
</dependency>

2)转到项目>> Maven >>更新项目

选择项目,然后单击确定。

3)可选步骤,如果直到第2步才解决,请在执行第1步后执行以下步骤

转到项目>> Maven >>更新项目>>选中“强制更新快照/发布”复选框

选择项目,然后单击确定。


1

当将-U与mvn全新安装一起使用时,早期版本的maven不会强制检查缺少的发行版,只有快照,尽管较新的版本支持此功能。

对于仍在努力使用旧版本的人来说,以下内容可能会有所帮助-

在Windows上:

cd %userprofile%\.m2\repository
for /r %i in (*.lastUpdated) do del %i

在Linux上:

find ~/.m2  -name "*.lastUpdated" -exec grep -q "Could not transfer" {} \; -print -exec rm {} \;

每当maven由于任何原因(连接/不存在等)而无法下载依赖项时,它将在$ home / .m2目录下相应文件夹的dependency-name.lastUpdate文件中添加“ .error =无法传输工件”。删除这些文件将迫使Maven再次尝试获取依赖项。


0

重要的是要添加,mvn 使用-U使用-U的主要区别在于,-U它将使用远程SNAPSHOT jar覆盖您的本地SNAPSHOT jar。

mvn install如果您有其他生成jar的proj模块,则从local创建的本地SNAPSHOT jar。


0

-U用于强制更新Maven Repo。采用

mvn -U clean install

这是与接受的答案完全相同的答案。给定6年前...
Kerwin Sneijders

@KerwinSneijders我在2年前的那个时候添加了答案,被接受的答案没有提供关于-U在这里做什么的信息
Sanjeev Guglani

据我所知,已接受的答案包括发布之日起的信息。(2012年3月14日)。即使没有,此信息也最好在已接受答案下方的注释中发布,因为它不是答案,而是其他信息
Kerwin Sneijders

0

我在这里尝试了所有答案,但似乎无济于事。首先重新启动计算机,然后运行mvn clean install -U。那解决了我的问题。


0

Maven所做的是,它将所有项目的依赖项下载到本地存储库(.m2文件夹)中。由于互联网导致本地存储库出现问题,因此您的项目面临着问题。我不确定这是否对您有帮助,但是您可以尝试删除.m2文件夹内存储库文件夹中的所有文件。由于本地存储库中没有任何内容,因此maven将被迫再次下载依赖项,从而强制进行更新。通常,.m2文件夹位于c:users:[用户名] :. m2


-1

我因其他原因遇到了这个问题。我去了maven仓库https://mvnrepository.com寻找最新版本的spring core,当时是5.0.0.M3 /这个仓库为我的pom.xml显示了此条目:

<!-- https://mvnrepository.com/artifact/org.springframework/spring-core -->
<dependency>
    <groupId>org.springframework</groupId>
    <artifactId>spring-core</artifactId>
    <version>5.0.0.M3</version>
</dependency>

我是个天真的傻瓜,我以为评论告诉我该jar位于默认存储库中。

但是,经过一番猛烈抨击,我在xml下方看到一条注释,上面写着“注意:此工件位于Alfresco公共存储库(https://artifacts.alfresco.com/nexus/content/repositories/public/) ”

因此,XML中的注释完全具有误导性。该jar位于另一个存档中,这就是为什么Maven找不到它的原因!



-3

我遇到了相同的错误,mvn install -U然后运行,然后运行mvn install对我有效。


10
请不要发布“所有其他答案中提到的内容也对我有用”的答案。
kryger

-4

我最近遇到这个问题并运行以下解决了所有问题

mvn -fae install

5
-fae,--fail-at-end Only fail the build afterwards; allow all non-impacted builds to continue这似乎是修复未更新的外部依赖关系的一种奇怪方法
Donatello

-5

mvn clean install -U不起作用。然而,mvn -U clean随后呢mvn clean install

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.