玛文找不到当地的藏物

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

未能在项目 X 上执行目标: 无法解决项目 X 的依赖关系: 未能在[归档存储库]中找到 Y 被缓存在本地存储库中,解决方案将不会被重新尝试,直到内部的更新间隔已经过去或强制更新->

其中 X 是正在建设的项目,Y 是据称丢失的工件。如果查看本地存储库,工件就在那里。这个构件从未安装在我们的存档库中,因此问题纯粹基于本地存储库。

我们已经尝试了 setings.xml 中的各种配置文件,当然还有“ mvn-U”。这样做既没有任何好处,也不应该有任何好处,因为这个工件从来不会超出本地存储库的范围。

唯一可行的两个方法是等待很长一段时间,直到 Maven 变得更智能,或者完全删除本地存储库。推测等待选项与前面提到的更新间隔有关。

我们在 Maven3.0.2和3.0.3中遇到过这个问题。我们正在使用 Archiva 1.0.3(但这也不应该是一个因素)。如果你能帮忙,我将不胜感激。

230296 次浏览

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

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

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

Maven 记得它什么都没找到的时候。关键是“在内部更新间隔过期或强制更新之前不会重新尝试解决->”

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

mvn -U将强制从远程存储库进行更新——同样,假设您现在已经用上述工件填充了远程。

当我的新项目依赖于 oraclejdbcjar 时,我遇到了类似的问题(我已经将它安装在本地存储库中,可以很好地用于其他项目)。我试了 U 选项,删除。最后更新文件或整个目录和下载再次,但它不工作。最后,我删除了该目录,并在本地再次安装,它的工作。

我在 Maven 中发现的一个错误是,我将 setings.xml 文件放在了错误的目录中。一定在里面。用户主目录下的 m2文件夹。检查以确保它放在正确的位置(如果使用的话,还要附带设置-security.xml)。

当我通过 shell 脚本安装本地工件时,我在 Ubuntu Linux 中使用了 DependencyResolutionException。解决方案是删除本地工件并再次“手动”安装它们——通过终端调用 mvn install:install-file

由于这里的选择对我不起作用,我分享我是如何解决它的:

我的项目有一个父项目(带有自己的 pom.xml) ,它有许多子模块,其中一个(A)对另一个子模块(B)有依赖关系。当我在 A 中尝试 mvn package时,它不工作,因为 B 不能被解析。

执行 mvn install 在父目录中完成了这项工作。在那之后,我可以在 A 内做 mvn package,只有这样它才能找到 B。

即使在脱机模式下,如果依赖项有 _ Remote.Repositories 标记,那么 maven 也会检查远程存储库。如果需要在脱机模式下操作,则可能需要删除这些文件。

下面的简单 shell 命令将删除这些标记文件。如果只对机器使用脱机模式,这样做是安全的。我不会这样做的机器,需要从网上下拉文件。

我在一个与网络断开连接的构建服务器上使用了这种策略。我们必须将存储库传输给它,删除标记文件,然后在脱机模式下运行。

在 Linux/Unix 上,您可以这样删除远程存储库标记文件:

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

即使是我也面临着这个问题,并用两种方法解决了它:

1)在 IDE 中选择项目并清除所有项目,然后右键单击 project-> go to maven and Update project Dependences 选择所有项目立即安装相同的项目。一旦这样做了,运行特定的项目

2)其他你可以做的是在 pom.xml 中检查你正在得到错误的依赖关系和 “ mvn clean install”那些 受供养人 项目第一以及当前项目中你面临问题的安装 maven 依赖关系。通过这种方式,将构建本地项目的依赖项,并创建 jar。

抓住一切。如果这里提到的解决方案不起作用(在我的例子中发生了这种情况) ,只需从’中删除所有内容。M2’文件夹/目录,并执行 mvn clean install

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

之所以会发生这种情况,是因为我在这里使用的是 http而不是 https:

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

我在另一个原因上也犯了同样的错误: 我创建了一个包含我们的“良好实践”依赖项的 starter POM,并在本地构建和安装它来测试它。我可以“看到”它在回购,但一个项目,使用它得到上述错误。我所做的就是将启动 POM 设置为 POM,这样就没有 JAR 了。Maven 说它不在 Nexus 中是非常正确的——但是我没有预料到它会在 Nexus 中,所以这个错误是,嗯,没有帮助的。改变启动器 POM 正常包装和重新安装固定的问题。

检查是否您的工件 Y 的包装设置为“罐子”。如果您已经通过错误或复制粘贴将其定义为“ war”,那么它将显示这个奇怪的“缓存在本地存储库中,直到内部的更新间隔已经过去或强制更新后才会重新尝试解析”。我希望类似“神器 Y 是战争,罐子类型预期”。

在我的例子中,我需要项目 Y 是一个要通过 Tomcat 部署的 WAR,同时它也需要是一个 JAR,以便能够将它作为一个依赖项添加到项目 X 中。

因此,在项目 Y 的 pom.xml中,我添加了这个插件来创建一个 JAR 和 WAR:

            <plugin>
<artifactId>maven-war-plugin</artifactId>
<version>3.2.2</version>
<configuration>
<attachClasses>true</attachClasses>
<classesClassifier>classes</classesClassifier>
</configuration>
</plugin>

在项目 X 的 pom.xml中添加项目 Y 的依赖项时,我必须添加一个 classifier:

        <dependency>
<groupId>groupId.of.project.Y</groupId>
<artifactId>project.Y</artifactId>
<version>1.0-SNAPSHOT</version>
<classifier>classes</classifier>
</dependency>

注意: 当您构建项目 Y 时,您将在目标文件夹中看到2个打包: project-Y.warproject-Y-classes.jar,这就是为什么在导入时要指定 classes分类器来导入 JAR 而不是 WAR 的原因。

在我的例子中,我必须在根级别的级别依赖中添加 mavenLocal ()

mavenCentral()
mavenLocal()

下面是这个问题的长解决方案 (不是快速修复,但如果没有其他解决方案将工作)

你可能会因为我这么说而讨厌我,但是对于 Eclipse 这样的开源项目来说,这是事实。因为开放源码是模块化的,允许你用很多工具来构建和开发一个项目,比如 maven,spring boot,xml 或 groovy 的选项,不同的 Eclipse 更新等等。问题在于 Eclipse 允许您在缺少 maven 构建的情况下运行项目,因为 IDE 足够聪明,可以使用 remote _ itory 解决依赖关系,在这里它存储并捕获没有正确构建在项目上的 jar 文件。

由于这个特性,您可能实际上有本地构建问题,但就像 DNS 服务器一样; 如果在本地目录中找不到解决方案,Eclipse 将在其远程缓存库中查找解决方案。当您删除 remote _ itory 并让 Maven 第二次重新构建它时,项目最终可能会产生更多的错误,而不会再次构建,或者可能会重新构建丢失的缓存。但这不太可能。

所以长话短说,解决你的问题。

这是一个项目架构问题!

解决方案: 您需要做的是查看本地项目中所有依赖项目的 pom.xml 文件和 maven 依赖项文件夹,并尝试解决 maven 依赖项文件夹中缺少的所有依赖项 jar。如果您有一个引用库,我建议将这些 jar 移动到本地项目的 maven 依赖文件夹中。

你必须解决每一个子项目,然后导航到你的根项目,使用 Maven-> Build-> clean install (勾选“跳过测试”和“解决工作区工件”)修复每一个项目,直到每个项目都成功构建。

最有可能的情况是,当您强制将整个解决方案更新到所有项目时,您将得到一个具有 IDE 自动解析功能的错误列表。自动解决将引用一个简单的参考来修复这个问题。但是为了部署,你必须手动修复项目,因为 Eclipse,Spring 和 Maven 可以很好地协同工作,但是可能有一些事情他们不能达成一致。所以,在这种情况下,你必须扮演外交官的角色,然后自己想办法。

这是个悲哀的事实。

总之,我在我的项目中有一系列的问题。我有个问题。生成的 war 文件包含空的 jar 文件夹,除非我强制执行,否则构建不会干净。生成的 WAR 文件将在 tomcat 服务器生产中运行一个404错误,并且在执行 API 时,我的角度应用程序将抛出一个 Cors-Error。

我的前端项目中的所有错误都是人为的,因为所有问题的根源都是生成的 WAR 文件。它没有生成依赖项,Main 项目没有在 tomcat 中执行,tomcat 服务器无法运行 spring 初始化程序来在服务器上部署 cors 策略,以允许我的角度应用程序进行通信。但总的来说,开发环境运行良好,没有问题。

这就是我对这个线程的长期解决方案。