在Gradle中创建具有不同依赖项的多个.WAR文件

时间:2012-10-25 21:37:24

标签: groovy gradle dependency-management

我正在使用war插件为gradle中的项目生成一个简单的.WAR文件。我想知道如何配置gradle,这样我就可以创建4个不同依赖关系的.WAR文件。

我已经使用进入分发所需的jar配置了依赖项编译配置。 src中的代码都不依赖于几个这些jar,但我想知道如何配置项目来创建

  • 包含依赖关系图中所有jar的standard.WAR文件(即使它们未被使用 - 这没关系 - 我正在测试一些东西)
  • 另一个仅包含qas.jar
  • 的标准qas-only.WAR文件
  • 另一个包含qas.jar和log4j的标准qas-log4j.WAR文件

我配置哪些任务以使生成的工件使用特定的依赖关系配置?

仅供参考:在这种情况下,编译所需的唯一jar是qas.jar。

下面我的例子创建了一个war文件,它只包含一个jar,但是我希望用不同的jar生成5个不同的.war文件。

的build.gradle

apply plugin: 'java'
apply plugin: 'war'

dependencies {
    compile files('/lib/qas.jar','/lib/axis1-1.4.jar','/lib/axis2-kernel-1.3.jar','/lib/dom4j-1.6.1.jar','/lib/log4j-1.2.14.jar')
    providedCompile files('/lib/j2ee-1.4.03.jar')
}

war {
    classpath = ['/lib/qas.jar']
}

task dist(dependsOn: 'war') << {
    copy {
        from war.archivePath
        into "dist/"
    }
}

1 个答案:

答案 0 :(得分:18)

我对你实际尝试构建的WAR分布有多少感到困惑。您可以轻松修改它以创建其他WAR文件。以下是实现这一目标的一种方法:

task createStandardWar(type: War, dependsOn: classes) {
    baseName = 'standard'
    destinationDir = file("$buildDir/dist")
}

task createStandardWarQasOnly(type: War, dependsOn: classes) {
    baseName = 'standard-qas-only'
    destinationDir = file("$buildDir/dist")
    classpath = war.classpath.minus(files('/lib/axis1-1.4.jar','/lib/axis2-kernel-1.3.jar','/lib/dom4j-1.6.1.jar','/lib/log4j-1.2.14.jar'))
}

task createStandardWarQasAndLog4J(type: War, dependsOn: classes) {
    baseName = 'standard-qas-log4j'
    destinationDir = file("$buildDir/dist")
    classpath = war.classpath.minus(files('/lib/axis1-1.4.jar','/lib/axis2-kernel-1.3.jar','/lib/dom4j-1.6.1.jar'))
}

task createDists(dependsOn: [createStandardWar, createStandardWarQasOnly, createStandardWarQasAndLog4J])

此构建脚本摘录通过声明类型为War的增强任务来创建三个不同的WAR文件。它假设您仍然希望将已编译的源文件放在WAR文件中的WEB-INF/classes下,因此我没有将其从类路径中删除。分发最终在目录build/dist中。任务createDists创建了所有这些。