Maven无法找到本地工件


107

有时,maven抱怨在构建另一个将其作为依赖项的项目时,无法在本地存储库中找到在本地构建和打包的特定依赖项。我们收到如下错误:

无法在项目X上执行目标:无法解析项目X的依赖项:在[archiva存储库]中找不到Y已在本地存储库中缓存,在内部更新间隔过去或强制执行更新之前,不会重新尝试解决- >

其中X是正在构建的项目,而Y是所谓的缺失工件。如果您查看本地存储库,则工件就在其中。该工件从未安装在我们的archiva存储库中,因此问题完全基于本地存储库。

我们已经在settings.xml中尝试了各种配置文件,当然也尝试了“ mvn -U”。它们都没有任何好处,也不应做任何事情,因为此工件不会比本地存储库更进一步。

看来唯一有效的两件事是等待很长时间直到maven变得聪明起来,或者完全删除本地存储库。大概等待选项与上述更新间隔有关。

我们已经在Maven 3.0.2和3.0.3中遇到了这个问题。我们正在使用Archiva 1.0.3(但再次不应该成为一个因素)。任何帮助将不胜感激。


1
Maven是否在“等待”期间或之前记录了什么?即它是否尝试连接到无法访问的存储库?另外,有问题的工件是否为“ -SNAPSHOT”?
noahlz 2012年

除了上面提到的错误外,Maven不会记录其他任何内容。是的,这是快照依赖关系。
user1686620 2012年


1
在尝试构建第二个项目之前,您是否已安装了构建软件包?
khmarbaise 2012年

3
我喜欢错误消息是连续的,而不是语法正确的句子。这样,我们不确定它是否找不到Y,或者Y是否在本地缓存,或者两者都不知道。无论如何,我也有类似的问题。我能够用-U选项来解决它,因为我的依赖性在我公司的内部回购。为什么没有将所需的工件部署到公司的内部存储库?
jyoungdev

Answers:


77

本地Maven存储库使用工件目录中名为“ _maven.repositories”的文件来跟踪工件最初来自何处。删除它之后,构建工作正常。这个答案为我解决了这个问题。


26
对我来说,这是一个名为“ _remote.repositories”的文件。我删除了它,它起作用了!谢谢你的把戏!
perbellinio 2015年

2
还存在名为_remote.repositories的文件。当我们的联系停止与网络连接时,它发生了,我无法获得依赖关系
cabaji99 '18

1
提供的解决方案可以正常工作。但是,我对为什么会发生此问题很感兴趣。有人可以给我一个快速的解释吗?我需要做些不同的事情吗?
Janothan '19

如果您要绕过一次此来源检查(不删除元文件),请尝试传递aether.enhancedLocalRepository.trackingFilename=some_dummy_file_name到依赖关系解析过程;否则,请转至本站。最简单的方法是将-D系统属性添加到调用命令。
Janaka Bandara

@Janothan IMO答案中的链接提供了一个很好的解释:)
Janaka Bandara

39

由于这里的选项对我不起作用,因此我分享了解决方法:

我的项目有一个父项目(具有自己的pom.xml),该项目具有许多子模块,其中一个模块(A)与另一个子模块(B)有依赖性。当我尝试mvn packageA时,它无法工作,因为B无法解析。

mvn install 在父目录中执行该工作。之后,我可以mvn package在A内部进行操作,然后才可以找到B。


3
谢谢!这让我发疯。当我在一行上执行时,mvn clean软件包jboss-as:deploy可以工作,但是当我分别执行它们时却不能。
PMorganCA

18

即使在脱机模式下,maven也会检查远程存储库是否存在依赖项的_remote.repositories标记。如果需要在脱机模式下运行,则可能需要删除这些文件。

下面的简单shell命令将删除这些标记文件。如果仅对计算机使用脱机模式,则这样做是安全的。我不会在需要从网络上提取文件的计算机上执行此操作。

我在与Web断开连接的构建服务器上使用了此策略。我们必须将存储库转移到该存储库,删除标记文件,然后以脱机模式运行。

在Linux / Unix上,您可以通过以下方式删除远程存储库标记文件:

cd ~/.m2
find . -name "_remote.repositories" -type f -delete

1
对于我从另一台计算机复制过来的依赖项(对于中央存储库中没有),该解决方案为我工作。该命令虽然会丢失一些字符。这是完整的命令:find。名称“ _remote.repositories” -type -f -delete
Hans Deragon

2
或者,而不是删除,您应该能够“误导” Maven以不_remote.repositories通过传递-Daether.enhancedLocalRepository.trackingFilename=some_dummy_file_name给进程来查看文件。(没有尝试实际的Maven构建,但是在以编程方式调用Maven时可以使用;因此前者也可以使用)
Janaka Bandara

1
我进行了此查找并删除了Maven未找到的特定依赖项(罐),因为它们已列出并且可以管理到(<10)。这是由于配置错误所指向的远程Nexus当前不可用(据我所知。)。因此,实际上不需要清除所有回购以进行删除。无论如何,这种解决方案节省了一天的时间。它对我有用。
Diego1974年

9

当我遇到这种情况时,是因为我盲目地从模板复制了settings.xml,但它仍然具有空白<localRepository/>元素。这意味着在解决依赖关系时没有使用本地存储库(尽管您安装的工件仍然会放在默认位置)。当我用<localRepository>${user.home}\.m2\repository</localRepository>它替换它时,它开始工作。

对于* nix <localRepository>${user.home}/.m2/repository</localRepository>,我想是。


6
$ {user.home} \。m2 \ repository是默认设置,因此删除空标记应该是相同的。
LuisMuñoz'15

9

Maven记得什么时候没找到东西。关键是“在内部更新间隔过去或强制执行更新之前,不会重新尝试分辨率->”

快速的解决方案是删除问题工件的本地“存储库”子目录-假设您已解决问题。:)

mvn -U 将再次从远程存储库中强制进行更新-再次假设您现在已使用所述工件填充远程。


2

抓住一切。如果此处提到的解决方案不起作用(在我的情况下是这种情况),只需从'.m2'文件夹/目录中删除所有内容,然后执行即可mvn clean install



1

甚至我也遇到了这个问题,并通过2种方式解决了这个问题:

1)在您的IDE中,选择项目并清理所有项目,然后通过右键单击项目安装所有Maven依赖项->转到maven,然后更新项目依赖项一次选择所有项目以进行安装。完成后,运行特定项目

2)否则,你所能做的就是在pom.xml为您越来越错误和依赖检查“MVN净安装”那些依赖的 第一个项目,并在其中面临的问题当前项目的安装Maven的依赖。这样,将构建本地项目的依赖项并创建jar。


0

当我的新项目依赖于oracle jdbc jar(我已将其安装在本地存储库中并且对于其他项目运行良好)时,我遇到了类似的问题。我试过-U选项,删除.lastupdate文件或整个目录,然后再次下载,但是它不起作用。最后,我删除了目录,然后再次将其安装在本地,可以正常工作。


0

我在Maven周围发现的错误之一是将settings.xml文件放在错误的目录中。它必须位于用户主目录下的.m2文件夹中。检查以确保该位置正确(如果使用的话,还有settings-security.xml)。


0

我曾DependencyResolutionException在Ubuntu Linux操作系统的时候我已经安装了通过shell脚本当地文物。解决方案是删除本地工件,然后“手动”重新安装- mvn install:install-file通过终端进行调用。


0

发生这种情况是因为我http,而不是https在此:

<repository>
    <id>jcenter</id>
    <name>jcenter-bintray</name>
    <url>https://jcenter.bintray.com</url>
</repository>

0

检查您的工件Y是否将包装设置为“罐子”。如果您通过错误或复制粘贴将其定义为“ war”,则会显示此奇怪的“已缓存在本地存储库中,直到内部更新间隔到期或强制执行更新后,才会重新尝试解决”。我希望像“工件Y是战争,应该是jar类型”之类的东西。


-1

由于不同的原因,我也有同样的错误:我创建了一个包含我们的“良好实践”依赖项的入门级POM,并在本地构建和安装了该POM以对其进行测试。我可以在存储库中“看到”它,但是使用它的项目遇到了以上错误。我所做的是将启动程序POM设置为pom,因此没有JAR。Maven非常正确,因为它不在Nexus中-但我没想到会这样,所以错误是,嗯,没有帮助。将启动程序POM更改为常规包装并重新安装可解决此问题。


作为答案,此答案可能会更好,因为它不是问题的直接答案。
6
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.