Maven:无法读取构件描述符。

334

我希望有人能够帮助我解决一个困扰我的问题。

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

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时,也没有报告任何错误。

有人能告诉我在这里我错过了什么或者做错了什么吗?


5
如果某人(例如我)因为Maven>3.8.1中的HTTP存储库而遇到了此错误,类似于maven-default-http-blocker(http://0.0.0.0/):Blocked mirror for repositories:,请查阅此链接:https://dev59.com/jlEG5IYBdhLWcg3wX731 - aksh1618
@aksh1618 谢谢。那是解决我的问题的方法。 - Shreehari
25个回答

220

您可以尝试 mvn -U clean install

-U 会强制检查远程仓库中是否存在更新版本和快照。


51
如果你安装了m2e插件,那么你可以使用Maven -> "Update Project..."。下一个对话框将有一个选项来强制更新快照和发布版本。 - Aaron Digulla
1
@AaronDigulla 这是导致我出错的对话框。 - Jeroen
2
为使其正常工作,您应该在项目的根目录下运行命令。 - Daria
2
我也遇到了类似的问题。这真的很有帮助,另外,如果您正在使用私有mvn仓库,请确保首先将其添加到您的~/.m2/setting.xml镜像部分中,然后在运行mvn -U clean install之后,确保点击“重新导入”(右键单击项目,然后在底部的“Maven”部分下有一个“重新导入”按钮)。 - JACK ZHANG
1
@TomaszWaszczyk:是的,有的。
  1. Windows-显示视图->终端。
  2. 添加本地终端。
  3. cd PomFilePath
  4. 运行命令。
- Vishnu Dahatonde

181

如果您有一些子项目引用了一个父POM文件,并且您还没有从父POM目录安装(在父目录中运行mvn install),那么就可能出现此问题。其中一个子项目可能依赖于兄弟项目,当它试图读取兄弟项目的POM时,如果您至少没有从父POM目录安装过一次,则会失败并产生上述错误。

当我将项目移动到新计算机时,我遇到了这个问题。我习惯于从子项目运行命令,并没有在父项目上运行安装。


17
另外,在运行父级项目的mvn install命令时,你也可以添加-N参数来进行非递归操作。这将导致Maven跳过所有模块(包括失败的模块)并仅对父级执行install目标。 - Jacek Prucia
@bzuillsmith,为什么你需要在父POM中运行mvn install呢?这不仅仅是用于下载兄弟依赖项吗?如果你已经进入了兄弟目录并从那里运行了mvn install,以便将JAR包放入本地存储库,那么这难道不会达到完全相同的效果吗? - user2158382
1
我已经有几年没用Maven了,但是——是的,我相信你可以逐个安装兄弟依赖项。从父目录安装通常会少做一些工作(需要键入和运行较少的命令)。在大型项目的某些情况下,您可能不希望安装所有子项目,此时您需要逐个运行它们。 - Ben Zuill-Smith
我的项目类似于ch-multip-spring\simple-parent\simple-model\pom.xml,我从根ch-multip-spring文件夹执行mvn clean install命令(不是从simple-parent执行),这解决了我的问题,该问题与帖子标题相似。 - IcyBrk
@bzuillsmith 哇!这个答案真的帮了我大忙。在父POM上至少执行一次mvn install是关键!我的Spring Boot子项目一直无法解析兄弟子项目的依赖,即使我在那个兄弟项目上执行了mvn install!但是一旦我在父级上执行了mvn -N install,Spring Boot子项目终于开始工作了。所以,再次强调,父级上的mvn -N install是关键。(虽然我还不知道为什么) - Zhou
显示剩余2条评论

143

在使用 IntelliJ IDEA 时遇到同样的问题,以下方法适用:

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

IntelliJ 2017.2 > Preferences/Settings > Build, Execution, Deployment > Build Tools > Maven > Always update snapshots (checkbox) 的屏幕截图


1
这对我有用,但我不明白为什么 - 我试图从命令行构建。是因为IntelliJ缓存了什么东西吗? - goodOldFashioned
我也试过了!简直不敢相信这有多么令人沮丧。谢谢! - Ben Arena
1
@goodOldFashioned:这个“总是更新”的操作覆盖了本地仓库中的lastUpdated文件。-U选项在命令行中也有同样的作用。因此,IntelliJ修复了您的本地仓库,然后命令行又可以正常工作了。 - Frischling
简单而有效 - Ojonugwa Jude Ochalifu
3
在浏览整个互联网之后,最终这个方法对我有用。 - khawarizmi

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

在该对话框中,选中强制更新快照/发布版本复选框并单击确定。(请参考下面的图片)

更新Maven项目对话框

这对我有效!


40
如果您正在使用 Eclipse:
  • 右键单击项目 > 属性 > Maven

  • 确保未选中 从工作区项目解析依赖项


4
对我来说它有效,但我不明白为什么?这背后有何解释? - Anand
1
这对我没有起作用,最初缺少了12个依赖项,现在是74个。 - user2044822

29

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


8
您需要将代理信息放入您的.m2/settings.xml文件中。具体操作请参考此链接:https://maven.apache.org/guides/mini/guide-proxies.html - inanutshellus

15

我在使用Eclipse时遇到了同样的问题,其中Maven构建命令行可以正常工作,但请尝试:

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

这个错误就会消失……为什么我的mvn命令行可以使用这些目录,而Eclipse .m2eclipse不能,我不知道,这有点糟糕。现在我的项目在Eclipse中又可以工作了。


顺便说一下,我们转向了Gradle......比Ant和Maven更加愉快......非常好的设置。 - Dean Hiller
甚至不确定这是否与 Eclipse 有关。我在 IntelliJ 中也遇到了同样的问题,删除有问题的软件包并重新运行 mvn clean install 的命令解决了问题。 - Jay

14

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


1
是啊,生活就是那么简单。无论如何,@prime 的答案对我有用。 - Imam Bux

12

我通过删除仓库中除了 .jar 和 .pom 文件以外的所有文件夹解决了这个问题。


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

9
对我而言,这与在以下位置设置“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 . 

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接