Maven未能找到当地的工件

use*_*620 86 resolution maven

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

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

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

我们在settings.xml中尝试了各种配置文件,当然还有"mvn -U".也没有任何好处,也不应该,因为这个工件永远不会比本地存储库更进一步.

似乎工作的唯一两件事是等待很长时间,直到maven智能化,或完全删除本地存储库.据推测,等待选项与上述更新间隔有关.

我们在maven 3.0.2和3.0.3中遇到过这个问题.我们正在使用Archiva 1.0.3(但这不应该是一个因素).任何帮助将不胜感激.

小智 64

本地Maven仓库使用工件目录中名为"_maven.repositories"的文件跟踪工件最初来自何处.删除后,构建工作.这个答案为我解决了这个问题.

  • 对我来说,这是一个名为"_remote.repositories"的文件.我删除了它,它工作了!谢谢你的技巧! (21认同)
  • 还存在名为_remote.repositories的文件。当我们的联系停止与网络连接从而无法获取依赖项时,这发生在我身上 (2认同)
  • 提供的解决方案确实有效。但是,我对为什么会出现这个问题很感兴趣。有人可以给我一个快速的解释吗?我必须做一些不同的事情吗? (2认同)

Flo*_*rer 34

由于此处的选项对我不起作用,我将分享我是如何解决它的:

我的项目有一个父项目(有自己的pom.xml),它有许多子模块,其中一个(A)与另一个子(B)有依赖关系.当我mvn package在A中尝试时,它没有用,因为B无法解决.

mvn install 在父目录中执行完成了该工作.在那之后,我可以mvn package在A里面做,然后才能找到B.

  • 谢谢!这让我发疯了.mvn clean package jboss-as:当我在一行上执行时,deploy正在工作,但是当我单独执行它时却没有. (3认同)

Jon*_*Jon 16

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

下面的简单shell命令删除这些标记文件.如果您只为机器使用离线模式,则可以安全地执行此操作.我不会在需要从网络上下载文件的机器上执行此操作.

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

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

cd ~/.m2
find . -name "_remote.repositories" -type f -delete
Run Code Online (Sandbox Code Playgroud)

  • 或者,除了删除之外,您应该能够通过将 `-Daether.enhancedLocalRepository.trackingFilename=some_dummy_file_name` 传递给进程来“误导”Maven 不查看 `_remote.repositories` 文件。(没有尝试实际的 Maven 构建,但在以编程方式调用 Maven 时有效;所以前者也应该有效) (2认同)

And*_*dre 8

Maven记得什么时候没找到什么东西.关键是"在内部更新间隔过去或强制更新之前,不会重新尝试解决 - >"

快速解决方案是删除问题工件的本地"repository"子目录 - 假设您已修复问题.:)

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


Pau*_*cks 7

当这件事发生在我身上时,是因为我从模板中盲目地复制了我的settings.xml,它仍然有空白<localRepository/>元素.这意味着在解析依赖项时没有使用本地存储库(尽管您安装的工件仍然放在默认位置).当我用<localRepository>${user.home}\.m2\repository</localRepository>它替换它开始工作.

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

  • $ {user.home} \.m2\repository是默认值,因此删除空标记应该是一样的. (6认同)

Jar*_*uba 5

如果您已<repositories/>在 pom.xml 中定义,显然您的本地存储库将被忽略。