首页 > 解决方案 > Gradle:与 jar 依赖建立一场脂肪大战

问题描述

我正在尝试从 Ant + Ivy 迁移到 Gradle,但无法正确包含传递依赖项。

例如,我有以下 Ivy 依赖项:

<dependency org="org.springframework" name="spring-jdbc" rev="4.2.0.RELEASE"/>

正如 Ivy 报告显示的那样,这个工件依赖于spring-tx,它正在被 Ivy 检索并WEB-INF/lib作为 jar 放置。但是 Gradle 默认情况下不会这样做,并且这段代码也不会这样做(它只是没有将任何spring-tx相关.class文件放在那里):

from { configurations.compileClasspath
            .findAll { !it.name.endsWith('pom') }
            .collect { it.isDirectory() ? it : zipTree(it) } } {
        into('WEB-INF/classes')
    }

有谁知道我如何将传递依赖项包含为 jars 并将它们放入WEB-INF\lib

标签: gradlegroovyantivy

解决方案


Gradlewar插件可用于此目的(请参阅War 插件文档)。

下面是一个非常简单的build.gradle脚本示例,它将创建一个war包含所有需要的依赖项(和传递依赖项)的/WEB-INF/lib

plugins{
    id "war"
}

repositories {
    mavenCentral()
}

dependencies{    
    implementation group: 'org.springframework', name: 'spring-jdbc', version: '4.2.0.RELEASE'

}

生成的warwith./gradlew build将包含/WEB-INF/lib 文件夹中的所有spring-jdbc库及其依赖项 ( spring-beans, spring-core, spring-tx...) 。


推荐阅读