Maven:无法读取工件描述符


258

我希望有人可以帮助我解决我遇到的问题。

当我尝试从终端构建项目时,出现以下错误:

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-utilsjar由一个单独的项目创建,并在该项目和另一个项目之间共享(另一个项目均未构建,但这归结于另一个问题)。

我能够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时,它也不会报告任何错误。

有人可以告诉我我在这里缺少什么或做错了吗?

Answers:


183

您可以随时尝试 mvn -U clean install

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


40
@MrPhi:如果您具有m2e插件,则可以使用Maven->“更新项目...”。下一个对话框将具有一个选项,用于强制更新快照和发行版。
亚伦·迪古拉

1
@AaronDigulla这是导致我出错的对话框。
Jeroen 2014年

1
为此,您应该在项目的根目录下运行命令
Daria

我也有类似的问题。这确实有帮助,此外,如果您使用的是私人mvn回购协议,请确保~/.m2/setting.xml先将其添加到镜像部分,然后再运行mvn -U clean install,确保Reimport(右键单击该项目,然后在底部下面Maven有一个Reimport按钮)。
张杰(JACK ZHANG)'18

1
@TomaszWaszczyk:是的。1. Windows显示视图->终端。2.添加本地终端3. cd PomFilePath 4.运行命令
Vishnu Dahatonde '19

142

如果您有一些引用父pom的子项目,并且尚未从父pom目录(mvn install从父目录运行)安装,则会出现此问题。子项目之一可能依赖于同级项目,并且当它去读取同级项目的pom时,它将失败,并出现问题中提到的错误,除非您从父pom目录中至少安装了一次。

将项目移至新计算机时,我只是遇到了此问题。我习惯从子项目运行命令,而没有在父项目上运行安装。


13
此外,mvn install在父级上运行时,您还可以添加-N非递归操作。这将导致Maven跳过所有模块(包括发生故障的模块),仅为install父模块执行目标。
Jacek Prucia

@JacekPrucia很高兴知道也需要安装pom工件(如果您的父母是pom)
Adrian

@bzuillsmith为什么您需要mvn install在父pom中运行。难道不是只能使用它以便可以下载同级依赖吗?如果您碰巧进入同级目录并mvn install从那里运行,以便jar位于您的本地存储库中,这是否完成了同样的事情?
user2158382

自从我使用maven已经有几年了,但是-是的,我相信您可以一个一个地安装同级依赖。从父级安装只会减少工作量(键入和运行的命令更少)。在大型项目中,有时您可能不希望安装所有子项目,因此您需要单独运行它们。
bzuillsmith

我的项目像ch-multip-spring \ simple-parent \ simple-model \ pom.xml,我从ch-multip-spring根文件夹(也不是从simple-parent)进行mvn clean安装,它解决了我类似的问题帖子标题。
IcyBrk

104

IntelliJ IDEA遇到了相同的问题,以下工作正常。

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

IntelliJ 2017.2>首选项/设置>构建,执行,部署>构建工具> Maven>始终更新快照的屏幕快照(复选框)


1
这对我有用,但是我不明白为什么-我试图从命令行进行构建。IntelliJ是否缓存了某些内容?
goodOldFashioned

也为我工作!不敢相信这是多么令人沮丧。谢谢!
本·

@ goodOldFashioned:此“始终更新”覆盖了本地存储库中的.... lastUpdated文件。-U从命令行执行相同的操作。所以intellij修复了您的本地存储库,然后命令行再次起作用。
Frischling

简单而有效
Ojonugwa裘德Ochalifu

2
浏览整个互联网之后,这最终对我
有用

37

如果使用的是Eclipse,请右键单击Project- > Maven- > Update Project。它将打开“更新Maven项目”对话框。

在该对话框中,选中“ 强制更新快照/发布”复选框,然后单击“ 确定”。(请参考下图)

更新Maven项目对话框

这对我有用!


36

如果您使用的是Eclipse,请 右键单击项目->属性-> Maven ,并确保未单击“ 解决工作区项目的依赖项 ”。

希望这可以帮助。


4
这个对我有用。但是我不明白为什么?这背后有什么解释吗?
阿南德(Anand)

1
这对我不起作用,最初缺少12个十进制,现在已是74个
user2044822

27

我知道我的谈话时间很晚,但是我也遇到了这个问题。我认为问题出在我公司的防火墙上。我的解决方案是拔出网络插头,连接到开放的无线网络,然后通过Eclipse强制进行更新。这解决了所有问题。



1
多谢你们!它为我工作,并节省了大量时间。
saidfagan

14

我在eclipse上遇到了同样的问题,其中maven build命令行工作正常,但是尝试一下

  • 进入.m2 / repository并擦除关联的目录
  • 在Eclipse中运行更新Maven依赖项

错误消失了。...为什么我的mvn命令行使用这些目录,而eclipse .m2eclipse却无法工作,我不知道,这有点糟。我的项目现在再次在Eclipse中运行。


在旁注中,我们切换到了gradle...。比ant和maven更快乐。
迪恩·希勒

甚至不确定它是否与Eclipse有关。我曾与在的IntelliJ同样的问题,并删除有问题的包,并重新运行mvn clean install工作
周杰伦

12

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


是的,就像生活就是这么简单。无论如何,@ prime答案对我有用。
伊玛目·巴克斯

10

我通过删除显示此错误的资源库文件夹来解决此问题,除了.jar和.pom文件以外,其他所有内容都显示此错误。


通过删除Maven本地存储库中的相关文件,然后更新整个项目,我也解决了相同的问题。
Infinitum Ad'in

8

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


1
pom.xml的检查很有用。我发现我有两次相同的依赖性(复制和粘贴错误)。清理后,一切都很好。
亚当·博切克

8

对我而言,这与在其中设置“ 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 . 

6

我有一个项目

 A/
 |--a1
 |--a2

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

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

(每个模块a1,b1等以及父项目A,B都按照父子的标准Maven规则拥有自己的pom.xml)

这两个项目都在我的本地Eclipse(从SVN)中检出。我正在积极研究A。

我知道B中开发了一个很好的通用功能(b4),我需要使用它。

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

b4的开发人员已将该b4模块作为工件部署在我们组织的存储库中。我将对模块POM的依赖性包括在内,即a2的pom.xml。Eclipse从仓库中下载了必需的工件,我可以将其中的类导入其中。

现在开始发行...出于某种目的,我需要检查b4的源代码,并且由于我已经在本地日食中检出B,所以我从SVN更新了它并检出了模块b4。我还运行了b4模块的pom.xml,目标类似于clean,package等。一段时间后,当我完成编码后,我需要创建模块a2的JAR。我在a2的pom.xml和BAM上运行了“包”!错误n a2模块的错误。这些错误也不是非常用户友好。唯一的事情是日志中肯定有b4的名称。

解决方案:在尝试了许多小时的解决方案很多小时后,我从B的项目目录(即../codebase/B)中的控制台运行了“ mvn -U clean install”。由于B是父项,因此对所有模块(包括b4)都运行了clean install命令,该命令成功运行。之后,我为我的父项目A运行了“ mvn -U clean install”。a2模块已成功编译,安装(稍后打包)。

这里重要的一点是,如果b4在您的工作空间中,则不仅要安装b4。您将需要清理安装完整的B。在阅读了Zuill的回答后,我想到了这个解决方案

编辑:这里要注意的另一件事是,如果我没有在本地环境中签出B项目,那么对我来说可能不会发生此问题。我倾向于认为这是因为我在本地工作区中签出了B。


5

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


好地方-不,不是很不幸。我从POM XML中复制了错误的标签,那是我需要的标签上方的标签,并且没有发现我所做的事情。哎呀!我已编辑问题以解决自己的愚蠢问题!
Morrislgn 2011年


4

没有通过Eclipse更新的运气。不得不使用mvn clean install -U(解决了所有问题)。


10
Gal Bracha也回答了这个问题。最好投票给一个可行的答案,并在需要时添加评论。
布莱恩·怀特

4

对我来说,依赖项POM实际上似乎是一个问题。

我通过使用jitpack虚拟存储库解决了该问题,您可以使用该虚拟存储库根据其URL而不是其自己的POM包含github存储库(在我看来,这是错误的)。

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

3

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

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

因此,有时由于本地Maven存储库中的某些不兼容性或问题而引起问题。


尝试在脱机时进行Maven重新同步,并完全使用IntelliJ连接。遵循您的建议,删除了.m2,现在它就像一个吊饰一样工作!谢谢!
Victor Grazi

3

在我们的案例中,由于不正确的groupId重命名而出现了错误,而多模块Maven配置中的某些项目引用了其他项目。

我们有一个聚合项目(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.teamcom.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: Failure to find <parent of the com.company.team:billing-parent project which is not available any more>

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

解决方法1:重命名groupIddependency也是如此。

解决方案2:替换groupId为以下${project.groupId}属性:

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

结论。 因此,如果您遇到多模块配置错误的话,我的建议是:彻底检查groupId并检查artifactId相邻模块的依赖性。


2

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

mvn -U clean install

通常,这应该已经解决了您的问题。

如果看到这样的消息:

无法解析项目: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

1

我有一个类似的问题。就我而言,.m2 / repositories文件夹中的testng版本已损坏,但是当我删除它并再次进行maven更新时,一切正常。


0

我在Eclipse中遇到了这个问题,mvn -U clean install但是没有用,但是右键单击该项目并选择Maven-> Update Project修复了它。


0

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

  1. 右键单击pom.xml,然后单击“运行方式”->“运行配置...”

  2. 显示“用户设置”的位置,单击“文件”按钮,然后添加settings.xml。

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


0

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


0

这对我有帮助:

从IDE(在我的情况下为Red Hat CodeReady Studio)。

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

运行命令如下>

$ cd /pom-file-path/

$ mvn -U clean install


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.