Gradle:与 jar 依赖建立一场脂肪大战
Posted
技术标签:
【中文标题】Gradle:与 jar 依赖建立一场脂肪大战【英文标题】:Gradle: building a fat war with jar dependencies 【发布时间】:2019-07-16 22:23:29 【问题描述】:我正在尝试从 Ant + Ivy 迁移到 Gradle,但无法正确包含传递依赖项。
例如,我有以下 Ivy 依赖项:
<dependency org="org.springframework" name="spring-jdbc" rev="4.2.0.RELEASE"/>
正如 Ivy 报告显示的那样,这个工件依赖于 spring-tx
,它正在被 Ivy 检索并作为 jar 放置到 WEB-INF/lib
。但是 Gradle 默认情况下不会这样做,并且这段代码也不能解决问题(它只是没有在其中放置任何与 spring-tx
相关的 .class
文件):
from configurations.compileClasspath
.findAll !it.name.endsWith('pom')
.collect it.isDirectory() ? it : zipTree(it)
into('WEB-INF/classes')
有谁知道我如何将传递依赖项包含为 jar 并将它们放入 WEB-INF\lib
中?
【问题讨论】:
你使用 Gradlewar
插件吗?
是的,我确实使用这个插件
war
插件正是我认为您需要的。请参阅下面的答案:请尝试这个非常简单的项目设置并检查您是否得到预期的结果。
【参考方案1】:
Gradle war
插件可用于此目的(请参阅 War Plugin documentation)。
下面是一个非常简单的build.gradle
脚本示例,它将在/WEB-INF/lib
下创建一个包含所有需要的依赖项(和传递依赖项)的war
plugins
id "war"
repositories
mavenCentral()
dependencies
implementation group: 'org.springframework', name: 'spring-jdbc', version: '4.2.0.RELEASE'
使用./gradlew build
生成的war
将在/WEB-INF/lib 文件夹。
【讨论】:
我确实使用了这个插件,它不会将任何传递依赖项放入WEB-INF/lib
,只有声明的那些
您尝试过上面简单的 9 行脚本吗?我看不出你没有获取传递依赖的理由。顺便说一句,你使用的是哪个 Gradle 版本?以上是关于Gradle:与 jar 依赖建立一场脂肪大战的主要内容,如果未能解决你的问题,请参考以下文章
gradle - 如何在 jar 中声明 jar 的依赖关系