【问题标题】:Gradle does not add transitive dependencies to war's WEB-INF/lib folderGradle 不会将传递依赖项添加到 war 的 WEB-INF/lib 文件夹
【发布时间】:2014-04-23 05:18:43
【问题描述】:

我有一个产生战争的网络项目。战争添加了一个 jar(我在外部 repo 上发布的另一个项目)作为编译依赖项。这个 jar 有它自己的编译依赖,它列在 jar 的 pom 文件中,以及项目的构建脚本中(这是一个 Gradle 项目)。我想将 jar 以及它自己的所有依赖项添加到我的战争的 WEB-INF/lib 文件夹中。但是,当我使用 Gradle 构建 Web 项目时,只添加了直接依赖项,而不添加传递项。

这是我的网络项目的构建脚本:

apply plugin: 'war'

repositories {     
    maven {url "http://repo-url"}
}

configurations.all {
    resolutionStrategy {
        cacheChangingModulesFor 0, 'seconds'
    }
}

dependencies {

    compile('com.company.group:artifact-name:1.0.0-SNAPSHOT') {
        changing = true
        transitive = true
    }
}

com.company.group:artifact-name:1.0.0-SNAPSHOT 确实有自己的 POM,其中列出了以下依赖项:

<dependency>
<groupId>us.codecraft</groupId>
<artifactId>xsoup</artifactId>
<version>0.2.0</version>
<scope>compile</scope>
</dependency>

另外,我将 cacheChangingModulesFor 设置为 0 秒,这样每次都使用最新版本的 SNAPSHOT jar。

我遇到的问题是 'us.codecraft:xsoup:0.2.0' 工件没有包含在战争中,即使它是战争的传递依赖项。

有什么想法吗?如果有不清楚的地方,请询问更多细节。

【问题讨论】:

  • 构建或存储库内容可能有问题,但从远处很难说它是什么。 changing = true 是快照依赖项的默认值。 transitive = true 也是默认值。如果传递依赖使其进入compile 配置,它也将进入战争。也许检查gradle dependencies --configuration compile 的输出,并尝试使用--refresh-dependencies 构建。
  • 再次感谢 Peter,感谢您在 forums.gradle.org 上对同一问题的支持

标签: gradle war transitive-dependency


【解决方案1】:

好的,问题在于 Gradle 如何解决我的 Web 项目所依赖的快照工件。由于某种未知的原因,在某些构建过程中,Gradle 不会下载最新的 jar,这阻止了它下载我在战争中需要的传递依赖,因为它不是这个旧 jar 的依赖。从我的仓库中删除旧的快照 jar 解决了这个问题。

【讨论】:

    猜你喜欢
    • 2011-05-15
    • 2011-06-25
    • 1970-01-01
    • 2011-03-26
    • 2012-04-22
    • 2014-11-24
    • 2020-10-05
    • 2011-04-23
    • 2019-09-19
    相关资源
    最近更新 更多