首页 文章

Maven:无法读取工件描述符

提问于
浏览
187

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

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

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不会报告任何错误 .

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

23 回答

  • 3

    我有一个项目

    A/
     |--a1
     |--a2
    

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

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

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

    这两个项目都在我的本地日食(来自SVN)上检出 . 我正在积极研究A.

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

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

    b4的开发人员已将此b4模块部署为我们组织的存储库中的工件 . 我将依赖性包含在我的模块的POM中,即a2的pom.xml . Eclipse从repo下载了reuqired artifact,我可以在其中导入类 .

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

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

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

    EDIT: One more thing here to note that if I didn't had B project checked out in Local environment then this issue might not have occurred for me. I tend to think that this happened cause I had B checked out in my local workspace.

  • 9

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

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

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

    我通过更改maven setting.xml和存储库来解决了这个问题

  • 3

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

  • 106

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

  • 0

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

  • 3

    如果您使用的是Eclipse, Right Click on your Project - > Maven - > Update Project . 它将打开Update Maven Project对话框 .

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

    Update Maven Project Dialog Box

    这对我有用!

  • 2

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

  • 31

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

  • 1

    对我来说,它与在里面设置“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 .
    
  • 23

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

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

    因此,有时问题会因为本地maven存储库中的某些不兼容性或问题而上升 .

  • 126

    这个错误基本上是说maven无法正确下载 . 因此,请转到您的maven本地存储库并确保没有任何 .lastUpdated 扩展名文件 .

  • 2

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

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

    如果您正在使用eclipse, right click on project -> properties -> Maven 并确保未单击“ Resolve dependencies from workspace projects ” .

    希望这可以帮助 .

  • 0

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

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

    • 其中显示“用户设置”,单击“文件”按钮并添加settings.xml .

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

  • 0

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

  • 4

    如果您有一些子项目引用父pom而您尚未从父pom目录安装(从父目录运行 mvn install ),则可能会出现此问题 . 其中一个子项目可能依赖于兄弟项目,当它读取兄弟的pom时,除非您从父pom目录至少安装一次,否则它将因问题中提到的错误而失败 .

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

  • 0

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

  • -3

    你可以随时试试 mvn -U clean install

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

  • 11

    在我们的例子中,由于不正确的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 和两个模块的 <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:同样在 dependency 中重命名 groupId .

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

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

    Conclusion. 所以,如果您在多模块配置中遇到错误,我的建议应该是:彻底检查相邻模块的依赖项 groupIdartifactId .

  • 50

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

    • 进入.m2 / repository并擦除相关目录

    • 在eclipse中运行更新maven依赖项

    错误消失....为什么我的mvn命令行使用那些目录和eclipse .m2eclipse不能,我不知道它有点糟透了 . 我的项目现在再次在eclipse中工作 .

  • 19

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

  • 3

    与IntelliJ IDEA相同的问题和后续工作 .

    • 转到 File

    • 选择 Settings

    • 选择 Build, Execution, Deployments

    • 从下拉列表中选择 Build Tools

    • 从下拉列表中选择 Maven

    • 勾选 Always update snapshots 复选框

    screen shot of IntelliJ 2017.2 > Preferences/Settings > Build, Execution, Deployment > Build Tools > Maven > Always update snapshots (checkbox)

相关问题