Maven未能find当地的神器
偶尔,maven会抱怨在本地存储库中找不到在本地构build和打包的特定依赖项,而在构build另一个将其作为依赖项的项目中找不到该依赖项。 我们得到一个错误,如:
无法执行项目目标X:无法parsing项目X的依赖关系:未能在[archiva repository]中findY被caching在本地存储库中,直到内部更新间隔已过或更新被强制为止,parsing将不会被重试 – >
其中X是正在build造的项目,Y是所谓的失踪神器。 如果您查看本地存储库,那么工件就在那里。 这个工件永远不会安装在我们的archiva仓库中,所以这个问题纯粹是基于本地仓库。
我们在settings.xml中尝试了各种configuration文件,当然还有“mvn -U”。 既不好,也不应该,因为这个工件永远不会超过本地存储库。
似乎工作的唯一两件事是等待很长时间,直到maven smartens,或完全删除本地存储库。 推测等待选项与上述更新间隔有关。
我们已经遇到这个问题与Maven的3.0.2和3.0.3。 我们正在使用Archiva 1.0.3(但这不应该是一个因素)。 任何帮助将不胜感激。
本地的Maven仓库跟踪工件最初来自哪里,使用工件目录中名为“_maven.repositories”的文件。 删除后,构build工作。 这个答案解决了我的问题。
当这发生在我身上的时候,那是因为我盲目地从模板中复制了我的settings.xml文件,它仍然有一个空的<localRepository/>
元素。 这意味着parsing依赖关系时没有使用本地资源库(虽然您安装的工件仍然放在默认位置)。 当我用<localRepository>${user.home}\.m2\repository</localRepository>
它时,它开始工作。
对于* nix,这将是<localRepository>${user.home}/.m2/repository</localRepository>
,我想。
Maven记得什么时候没find。 关键是“parsing将不会重新尝试,直到内部的更新间隔已经过去或更新被迫 – ”“
快速解决scheme是删除问题工件的本地“存储库”子目录 – 假设您已经解决了问题。 🙂
mvn -U
将强制从远程存储库进行更新 – 再次假设您现在已经使用所述工件对远程进行了填充。
由于这里的选项不适合我,我分享我是如何解决它的:
我的项目,有一个父项目(有自己的pom.xml),有许多子模块,其中一个(A)有依赖到另一个孩子(B)。 当我在A中尝试mvn package
时,它不起作用,因为B无法解决。
在父目录中执行mvn install
完成了这项工作。 之后,我可以在A里面做mvn package
,然后才能findB.
当我的新项目依赖于oracle jdbc jar(我已经安装在我的本地存储库中,并且适用于其他项目)时,我遇到了类似的问题。 我尝试了-U选项,删除.lastupdate文件或整个目录,再次downlaod,但它没有工作。 最后,我删除了目录,并再次在本地安装,它的工作原理。
我在Maven周围发现的错误之一是当我把我的settings.xml文件在错误的目录。 它必须位于用户家目录下的.m2文件夹中。 请检查以确保它位于正确的位置(如果使用的是settings-security.xml)。
当我通过shell脚本安装本地工件时,Ubuntu Linux中有DependencyResolutionException
。 解决scheme是删除本地工件,并再次“手动” mvn install:install-file
通过terminal调用mvn install:install-file
。
即使在离线模式下,如果有依赖关系的_remote.repositories标记,maven将检查远程存储库。 如果您需要在离线模式下运行,则可能需要删除这些文件。
下面我有一个简单的shell命令来删除这些标记文件。 如果您只使用机器的离线模式,则安全可靠。 我不会在需要从网上下载文件的机器上执行此操作。
我在与Web断开的构build服务器上使用了此策略。 我们必须将存储库传送给它,删除标记文件,然后以离线模式运行。
在Linux / Unix上,你可以这样删除远程仓库标记文件:
cd ~/.m2 find -name "_remote.repositories" type -f -delete
请试试这个命令。
mvnvalidation