Maven:读取工件描述符失败

我希望有人能帮助我解决一个我正在挣扎的问题。

当我试图从终端构建我的项目时,我得到这个错误:

Failed to read artifact descriptor for com.morrislgn.merchandising.common:test-data-utils:jar:0.3b-SNAPSHOT: Could not find artifact com.morrislgn.merchandising:merchandising:pom:0.3b-SNAPSHOT

common.test-data-utils jar由一个单独的项目创建,并在这个项目和另一个项目之间共享(另一个项目也不构建,但这归结于另一个问题)。

我能够毫无问题地构建com.morrislgn.merchandising.common:test-data-utils,我可以看到它在我的机器上的.m2本地存储库中的条目。我还在Eclipse中重新索引了我的存储库。

我的项目的POM有这样的条目:

<dependency>
<groupId>com.morrislgn.merchandising.common</groupId>
<artifactId>test-data-utils</artifactId>
<version>0.3b-SNAPSHOT</version>
</dependency>

这对我来说似乎是正确的——在Eclipse中查看POM时,它也没有报告任何错误。

谁能告诉我这里我缺了什么或做错了什么?

669206 次浏览

你提到了两个不同的groupid, com.morrislgn.merchandising.commoncom.johnlewis.jec.webpim.common。也许这就是问题所在。

我在eclipse中也有同样的问题,其中maven构建命令行工作得很好,但是 试试这个< / p >

  • 进入.m2/repository并擦除相关目录
  • 在eclipse中运行更新maven依赖项

错误消失....为什么我的mvn命令行工作与这些目录和eclipse .m2eclipse不能,我不知道,这有点糟糕。我的项目现在又在eclipse中工作了。

我通过删除除了.jar和.pom文件以外的所有显示此错误的存储库文件夹来解决这个问题。

“读取工件描述符失败”问题通常表明maven存储库中依赖项的pom文件有问题。我建议您仔细检查pom文件的名称是否与maven期望的名称相同,并检查pom文件内容是否有效。

你可以尝试mvn -U clean install

-U强制检查远程存储库上的更新版本和快照。

我知道我来晚了,但我也有这个问题。我认为问题出在公司的防火墙上。我的解决方案是断开网络,连接到开放的无线网络,然后通过Eclipse强制更新。这就解决了一切问题。

对我来说,这与设置内部的“User setting .xml”有关

Window > preferences > Maven > User Settings > and then browsing to the user Settings inside the { maven unarchived directory / }/apache-maven-2.2.1/conf/settings.xml .

如果你有一些引用父pom的子项目,而你没有从父pom目录安装(从父目录运行mvn install),就会发生这个问题。其中一个子项目可能依赖于一个兄弟项目,当它读取兄弟项目的pom时,它将失败,并出现问题中提到的错误,除非您至少从父pom目录安装过一次。

我刚刚在把一个项目转移到一台新电脑上时遇到了这个问题。我习惯在子项目上运行命令,而不在父项目上运行install。

我有一个项目

 A/
|--a1
|--a2

现在我们组织里还有一个项目

 B/
|--b1
|--b2
|--b3

(每个模块a1, b1等和父项目A, B都有自己的pom.xml,根据父和子的标准maven规则)

两个项目都是在我的本地eclipse上(从SVN)签出的。我正在积极研究A。

我了解到B中有一个很好的通用功能(b4),我需要使用它。

 B/
|--b1
|--b2
|--b3
|--b4 (NEW)

b4的开发人员已经将这个b4模块部署在我们组织的存储库中。我包含了我的模块的POM的依赖,即a2的POM .xml。Eclipse从repo下载了所需的工件,我可以导入其中的类。

现在问题开始… 出于某种目的,我需要检查b4的源代码,因为我已经在本地eclipse上签出了B,所以我从SVN更新了它,并签出了模块b4。我还运行模块b4的pom.xml,目标是清洁,包等。 一段时间后,当我完成我的编码,我需要创建一个JAR的模块a2。我在a2的pom.xml和BAM上运行了“package”!!a2模块的错误。这些错误对用户来说也不是很友好。唯一的问题是日志中有b4的名字是确定的 < p >解决方案: 在尝试了许多解决方案许多小时后,我从控制台在我的B的项目目录(即在../codebase/B)中运行“mvn -U clean install”。因为B是父模块,所以clean install命令运行了所有模块,包括b4,并且运行成功。在这之后,我运行“mvn -U清洁安装”为我的父项目,这是a和工作!A2模块编译,安装,(之后打包)成功

这里重要的一点是,如果b4在您的工作空间中,不要只安装b4。你将需要清洁安装完成b。我在阅读Zuill的答案后想出了这个解决方案

编辑:这里还要注意的一件事是,如果我没有在本地环境中检出B项目,那么这个问题可能不会发生在我身上。我倾向于认为发生这种情况是因为我在当地的工作场所检查了B。

如果您正在使用Eclipse:

  • < p > 右键点击项目>性能比;Maven

  • 确保解析工作空间项目的依赖关系未被单击。

< p >参考 Maven错误“传输失败”; < / p >
find ~/.m2  -name "*.lastUpdated" -exec grep -q "Could not transfer" {} \; -print -exec rm {} \;

我在eclipse中遇到了这个问题,mvn -U clean install没有工作,但右键单击项目并选择Maven->更新项目修复了它。

我刚开始使用STS Eclipse,第一次使用Maven。我设置的项目已经有了自己的settings.xml。如果是这种情况,您将需要在运行配置中更新settings.xml文件。

  1. 右键单击pom.xml并“运行为”->“运行配置…”

  2. 这里写着“用户设置”,点击文件按钮并添加settings.xml。

  3. 我认为这是特定于您的项目,但我的“目标”设置为“干净安装”,我检查了“跳过测试”。

对我来说,这似乎实际上是依赖POM的问题。

我通过使用jitpack虚拟存储库解决了这个问题,可以根据它们的URL而不是它们自己的POM包括github存储库(在我的例子中,这似乎是错误的)。

    <repository>
<id>jitpack.io</id>
<url>https://jitpack.io</url>
</repository>

我有一段时间遇到了同样的问题,尽管做了mvn -U clean install,但问题没有得到解决!

我最终通过删除整个.m2文件夹解决了这个问题,然后重新启动我的IDE,问题就消失了!

因此,有时问题会因为本地maven存储库中的一些不兼容或问题而出现。

如果您正在使用Eclipse,则右键单击您的项目 -> Maven -> 更新项目。它将打开“更新Maven项目”对话框。

在该对话框中,选中强制更新快照/发布复选框&单击好吧。(请参考下图)

Update Maven Project Dialog Box .

这对我很管用!

我也遇到过类似的问题。在我的情况下,我的.m2/repositories文件夹中的testng版本已损坏,但当我删除它&再次进行了maven更新,一切正常。

与IntelliJ IDEA有同样的问题,并遵循工作。

  • File
  • 选择Settings
  • 选择Build, Execution, Deployments
  • 从下拉菜单中选择Build Tools
  • 从下拉菜单中选择Maven
  • 勾选Always update snapshots复选框

 IntelliJ 2017.2 >屏幕截图;首选项/设置比;构建、执行、部署等;构建工具>Maven在始终更新快照(复选框) < / >

我在使用IntelliJ时也遇到了同样的问题。我解决了右键单击pom.xml > Maven >重新导入

在我们的例子中,出现错误是因为在多模块Maven配置中的一些项目引用其他项目时,groupId重命名不正确。

我们有一个聚合器项目(billing-parent),有两个模块(billing-apibilling):

com.company.team:billing-parent
|-com.company.team:billing-api
|-com.company.team:billing

项目billing依赖于billing-api。所以在pom.xml中它有:

<dependency>
<groupId>com.company.team</groupId>
<artifactId>billing-api</artifactId>
<version>${project.version}</version>
</dependency>

我们决定将groupId从com.company.team重命名为com.company.team.billing。我们在两个模块的父模块pom.xml<parent>部分替换了旧值。但是忘记更新上面的依赖项。因此,我们得到了配置,其中billing项目引用了旧的billing-api工件。最终,它会在一段时间后生成billing模块,错误如下

[ERROR] Failed to execute goal on project billing: Could not resolve dependencies for project com.company.team.billing:billing:jar:3.5.1-SNAPSHOT: Failed to collect dependencies at com.company.team:billing-api:jar:3.5.1-SNAPSHOT: Failed to read artifact descriptor for com.company.team:billing-api:jar:3.5.1-SNAPSHOT: Failed to find <parent of the com.company.team:billing-parent project which is not available more> < /代码> < / p >

尽管billing-api模块构建时没有错误。

解决方案1:在dependency中也重命名groupId

解决方案2:用${project.groupId}属性替换groupId,如下所示:

<dependency>
<groupId>${project.groupId}</groupId>
<artifactId>billing-api</artifactId>
<version>${project.version}</version>
</dependency>

< >强的结论。 因此,如果你在多模块配置中遇到错误,我的建议是:彻底检查groupIdartifactId对邻居模块的依赖关系

这个错误基本上是说maven无法从本地存储库读取某个依赖项。这可能是因为jar文件没有正确下载。因此,转到maven本地存储库,并确保没有任何.lastUpdated扩展文件。

在你的项目文件夹中通过shell导航并运行以下命令:

mvn -U clean install

通常这已经解决了你的问题。

如果你看到这样的消息:

无法解决project:war:0.0.1-SNAPSHOT:在com.sun.jersey:jersey-server:jar:1.9收集依赖项失败

然后执行:

export MAVEN_OPTS=-Dhttps.protocols=TLSv1,TLSv1.1,TLSv1.2

紧随其后的是:

mvn -U clean install

最后更新你的依赖项。

然后执行清洁的maven构建:

maven clean install

这帮助了我:

来自IDE(在我的例子中是Red Hat coderready Studio)。

Windows ->显示视图->终端->打开/添加本地终端

执行如下命令> .使用实例

cd /pom-file-path/美元

mvn -U clean install美元

我知道我很勇敢,九年后的今天……

对我来说,这是一个没有找到子依赖的问题。我最终通过查看包含__abc0行的“Error log”视图找到了真正的问题。双击它会显示一个带有堆栈跟踪的弹出窗口,最后一个原因最终揭示了我本地存储库中的一个损坏的JAR。我清理了一下,Eclipse/m2e又可以工作了。