【问题标题】:Maven: Failed to read artifact descriptorMaven:无法读取工件描述符
【发布时间】:2011-10-02 07:09:12
【问题描述】:

我希望有人可以帮助我解决我正在努力解决的问题。

当我尝试从终端构建我的项目时,我收到了这个错误:

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 本地存储库中创建的条目。我也在 E​​clipse 中重新索引了我的存储库。

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

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

这对我来说似乎是正确的 - 在 Eclipse 中查看 POM 时也不会报告任何错误。

谁能告诉我我在这里遗漏了什么或做错了什么?

【问题讨论】:

  • 如果有人(像我一样)由于 maven > 3.8.1 中的 http 存储库而遇到此错误,例如 maven-default-http-blocker (http://0.0.0.0/): Blocked mirror for repositories:,请参考:stackoverflow.com/q/67001968/6346531
  • @aksh1618 谢谢。这就是我的问题的解决方案

标签: java maven dependencies


【解决方案1】:

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

【讨论】:

  • 好地方 - 不,这不是不幸的。我从 POM XML 中复制了错误的标签,那是我需要的标签上方的标签,但没有发现我做了什么。哎呀!我已经编辑了问题以解决我的愚蠢问题!
【解决方案2】:

我在 Eclipse 中遇到了同样的问题,其中 maven 构建命令行工作得很好,但是 试试这个

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

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

【讨论】:

  • 顺便说一句,我们切换到 gradle....比 ant 和 maven 更快乐....非常好的设置。
  • 甚至不确定它是否与 Eclipse 相关。我在 IntelliJ 上遇到了同样的问题,删除了有问题的包并重新运行 mvn clean install 工作
【解决方案3】:

我通过删除显示此错误的存储库文件夹中的所有内容来解决此问题,但 .jar 和 .pom 文件除外。

【讨论】:

  • 我也解决了同样的问题,删除maven本地仓库中的相关文件,然后更新整个项目。
【解决方案4】:

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

【讨论】:

  • 对 pom.xml 的检查很有用。我发现我有两次相同的依赖项(复制和粘贴错误)。清理后一切正常。
【解决方案5】:

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

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

【讨论】:

  • @MrPhi:如果你有 m2e 插件,那么你可以使用 Maven -> "Update Project..."。下一个对话框将有一个强制更新快照和版本的选项。
  • @AaronDigulla 正是那个对话框导致了我的错误。
  • 要使其正常工作,您应该在项目的根目录中运行命令
  • 我也有类似的问题。这真的很有帮助,此外,如果您使用私有 mvn 存储库,请确保首先将其添加到您的 ~/.m2/setting.xml 镜像部分,然后在运行 mvn -U clean install 后,确保添加到 Reimport(右键单击项目,然后在底部Maven 部分下方有一个Reimport 按钮)。
  • @TomaszWaszczyk:是的。 1. Windows-显示视图->终端。 2. 添加本地终端 3. cd PomFilePath 4. 运行命令
【解决方案6】:

我知道我的谈话很晚了,但我也遇到了这个问题。我认为问题是我公司的防火墙。我的解决方案是从网络中拔出,连接到我们开放的无线网络,然后通过 Eclipse 强制更新。这解决了一切。

【讨论】:

【解决方案7】:

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

【讨论】:

  • Gal Bracha 也回答了这个问题。如果需要,最好投票给一个可行的答案并添加 cmets。
【解决方案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 . 

【讨论】:

    【解决方案9】:

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

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

    【讨论】:

    • 另外,在父节点上运行mvn install时,还可以添加-N进行非递归操作。这将导致 maven 跳过所有模块(包括失败的模块)并为父级执行 install 目标。
    • @JacekPrucia 很高兴知道还需要安装 pom 工件(如果您的父母是 pom)
    • @bzuillsmith 为什么需要在父 pom.xml 中运行 mvn install这不是仅用于下载兄弟依赖项吗?如果您碰巧去了同级目录并从那里运行 mvn install 以便 jar 位于您的本地存储库中,这不是完成同样的事情吗?
    • 我用maven已经好几年了,但是--是的,相信你可以一一安装兄弟依赖。从父级安装往往会减少工作量(输入和运行的命令更少)。在大型项目中可能存在您不希望安装所有子项目的情况,在这种情况下您需要单独运行它们。
    • 我的项目如 ch-multip-spring\simple-parent\simple-model\pom.xml,我从根 ch-multip-spring 文件夹执行 mvn clean install(也不是来自 simple-parent ),它解决了我类似于帖子标题的问题。
    【解决方案10】:

    我有一个项目

     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 下载了 reuqired 工件,我可以导入其中的类。

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

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

    这里重要的一点是,如果 b4 在您的工作区中,请不要只安装 b4。您将需要全新安装完整的 B。我在阅读了 Zuill

    的回答后提出了这个解决方案

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

    【讨论】:

    • 感谢您的帮助。我遇到了同样的问题,项目 A 添加了项目 B 的子模块 B-IDL 的依赖项。我应该 mvn deploy 整个 B 项目,而不仅仅是 mvn deploy submodule B-IDL。
    【解决方案11】:

    如果您使用的是 Eclipse:

    • 右击项目>属性>Maven

    • 确保未单击解决工作区项目中的依赖项

    【讨论】:

    • 它对我有用。但我不明白为什么?这背后有什么解释吗?
    • 这对我不起作用,最初缺少 12 个正派,这样做之后现在是 74 个
    【解决方案12】:

    参考 Maven error "Failure to transfer..."

    find ~/.m2  -name "*.lastUpdated" -exec grep -q "Could not transfer" {} \; -print -exec rm {} \;
    

    【讨论】:

      【解决方案13】:

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

      【讨论】:

        【解决方案14】:

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

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

        2. 在显示“用户设置”的地方单击“文件”按钮并添加 settings.xml。

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

        【讨论】:

          【解决方案15】:

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

          我通过使用 jitpack 虚拟存储库来解决这个问题,您可以使用 github 存储库基于它们的 URL 而不是它们自己的 POM(在我的情况下这似乎是错误的)。

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

          【讨论】:

          • 这对我有用。 pom.xml 文件的存储库部分应该正确更新,并且 标记应该是存储库的名称。节省了我很多时间!
          【解决方案16】:

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

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

          所以有时问题会因为本地 maven 存储库中的一些不兼容或问题而上升。

          【讨论】:

          • 尝试在离线时进行 Maven 重新同步,并完全使用 IntelliJ。听从您的建议,删除了 .m2,现在它就像一个魅力!谢谢!
          【解决方案17】:

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

          在该对话框中,选中Force Update of Snapshots/Releases复选框并点击OK。 (请参考下图)

          这对我有用!

          【讨论】:

            【解决方案18】:

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

            【讨论】:

              【解决方案19】:

              在 IntelliJ IDEA 上遇到了同样的问题,并且以下工作正常。

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

              【讨论】:

              • 这对我有用,但我不明白为什么 - 我试图从命令行构建。是否从 IntelliJ 缓存了某些内容?
              • 也为我工作!无法相信这是多么令人沮丧。谢谢!
              • @goodOldFashioned:这个“总是更新”覆盖了本地存储库中的 ....lastUpdated 文件。 -U 从命令行执行相同的操作。所以 intellij 修复了你的本地仓库,然后命令行再次运行。
              • 简单有效
              • 浏览了整个互联网后,终于对我有用了
              【解决方案20】:

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

              【讨论】:

              • 是的,生活就是这么简单。无论如何,@prime 答案对我有用。
              【解决方案21】:

              在我们的例子中,出现错误是因为 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.team 重命名为 com.company.team.billing。我们替换了父级的 pom.xml 和两个模块的 &lt;parent&gt; 部分中的旧值。但是忘记更新上面的依赖项。所以我们得到了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:也将 groupId 重命名为 dependency

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

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

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

              【讨论】:

                【解决方案22】:

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

                【讨论】:

                • 这是我的问题。一旦我删除了失败的依赖项的 lastUpdated 文件,它就可以正常工作了。
                【解决方案23】:

                在项目文件夹中通过 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
                

                【讨论】:

                  【解决方案24】:

                  这对我有帮助:

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

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

                  运行命令如下>

                  $cd /pom-file-path/

                  $mvn -U clean install

                  【讨论】:

                    【解决方案25】:

                    我知道我很勇敢,九年后的问题......

                    对我来说,这是一个找不到子依赖项的问题。通过查看包含An internal error occurred during: "Building". 行的“错误日志”视图,我终于找到了真正的问题。双击它会显示一个带有堆栈跟踪的弹出窗口,最后一个原因最终在我的本地存储库中显示了一个损坏的 JAR。我清理了它,Eclipse/m2e 能够再次工作。

                    【讨论】:

                      猜你喜欢
                      • 2011-07-03
                      • 1970-01-01
                      • 2018-10-20
                      • 1970-01-01
                      • 1970-01-01
                      • 2019-02-27
                      • 2019-08-10
                      • 1970-01-01
                      • 2016-05-08
                      相关资源
                      最近更新 更多