【问题标题】:Gradle cannot resolve dependencyGradle 无法解决依赖关系
【发布时间】:2014-01-05 16:17:10
【问题描述】:

在我的 build.gradle 文件中,我在依赖项中有一行:

compile group: 'org.jboss.seam.validation', name: 'seam-validation-api', version:'3.1.0.Final'

当我尝试运行项目时,例如'test' 任务,我得到一个错误:

> Could not resolve org.jboss.seam.validation:seam-validation-api:3.1.0.Final.
Required by:
    com.smspl.mc5:mc5-web-ui:1.0.0-SNAPSHOT
    com.smspl.mc5:mc5-web-ui:1.0.0-SNAPSHOT > com.smspl.mc5:mc5-common-rest:1.0.0-SNAPSHOT
> Could not parse POM /Users/amorfis/.m2/repository/org/jboss/seam/validation/seam-validation-api/3.1.0.Final/seam-validation-api-3.1.0.Final.pom
  > Unable to resolve version for dependency 'javax.enterprise:cdi-api:jar'
> Could not parse POM https://nexus.softwaremill.com/content/groups/smlcommon-repos/org/jboss/seam/validation/seam-validation-api/3.1.0.Final/seam-validation-api-3.1.0.Final.pom
  > Unable to resolve version for dependency 'javax.enterprise:cdi-api:jar'

我知道问题在于 seam-validation-api pom 中未指定“javax.enterprise:cdi-api:jar”的版本。它是在它的父级中指定的,而 gradle 可能在弄清楚它时遇到了一些问题。 seam-validation-api pom 的父部分如下所示:

<parent>
    <groupId>org.jboss.seam.validation</groupId>
    <artifactId>seam-validation-parent</artifactId>
    <version>3.1.0.Final</version>
    <relativePath>../pom.xml</relativePath>
</parent>

<dependencies>
    <dependency>
        <groupId>javax.enterprise</groupId>
        <artifactId>cdi-api</artifactId>
        <scope>provided</scope>
    </dependency>
</dependencies>

我的直觉告诉我问题的一部分。我还尝试通过在 build.gradle 'dependencies' 中添加新行来显式添加此父依赖项,但没有任何运气。

有人知道解决办法吗?

更新:在父 pom 中:

<groupId>org.jboss.seam.validation</groupId>
<artifactId>seam-validation-parent</artifactId>
<packaging>pom</packaging>
<version>3.1.0.Final</version>

<dependencyManagement>
    <dependencies>
        <dependency>
            <groupId>org.jboss.seam</groupId>
            <artifactId>seam-bom</artifactId>
            <version>${seam.version}</version>
            <type>pom</type>
            <scope>import</scope>
        </dependency>
    </dependencies>
</dependencyManagement>

【问题讨论】:

  • 能贴出父POM的相关部分吗? cdi-api 的版本是否在父 POM 中的 &lt;dependency-management&gt; 下指定?是否下载过父 POM?
  • 是的,validation-api 的版本(我认为这就是你的意思?)在&lt;depdenency-management&gt; 下指定,并且下载了父 pom,但我怀疑 gradle 是否做到了。可能是maven。 (我正在尝试将此模块从 maven 移动到 gradle)
  • 我的意思是组 ID javax.enterprise 和工件 ID cdi-api 的依赖项。这是 Gradle 版本无法解析的模块(请参阅错误消息)。
  • 好的,我现在明白了。谢谢。我添加了 seam-validation-api pom 片段,您可以在其中看到没有给出 cdi-api 的版本。它也不在父 pom 中。在 seam-validation-parent 中指定了 bom,但是......我也没有在 bom 中找到 cdi-api 版本。想知道 Maven 是从哪里得到它的吗?
  • 不。看起来 pom 编辑是唯一的选择,直到它在 gradle 中修复。

标签: gradle dependency-management


【解决方案1】:

这是对问题的一点研究(仅研究,不是解决方案):

  1. seam-validation-api-3.1.0.Final.pom 有父 seam-validation-parent-3.1.0.Final.pom

  2. seam-validation-parent-3.1.0.Final.pom 有父 seam-parent-19.pom

  3. 文件 seam-parent-4.pom 包含 cdi-api 的版本定义,但 seam-parent-19.pom 没有。

  4. 文件seam-validation-parent-3.0.0.Final.pom 确实包含cdi-api 的dependencyManagement,但较新版本的seam-validation-parent-3.1.0.Final.pom 没有。

我还查看了 GradlePomModuleDescriptorBuilder 的代码(引发上述“无法解析...”异常的类)。该类似乎在父 pom 链中查找 DependencyManagement 部分,但它不尊重 resolutionStrategy (或 gradle 脚本中的任何其他定义)。所以目前不可能增加/覆盖 POM 的dependencyManagement。

我的建议:联系 seam 框架的开发人员并要求他们修复依赖关系。

【讨论】:

    猜你喜欢
    • 2016-09-03
    • 1970-01-01
    • 2018-09-18
    • 1970-01-01
    • 1970-01-01
    • 2016-02-16
    • 2017-02-20
    相关资源
    最近更新 更多