如何在Gradle中为复合项目创建WAR?

时间:2017-11-17 06:59:21

标签: gradle buildship

我正在使用Eclipse Buildship V2.1.2 for Gradle。我有两个独立的Web项目,P1和P2以及一个项目P3,它作为所有其他项目的依赖项。我的任务是创建一个主构建,我可以用它来构建和生成来自P1和P2的WAR文件以及来自P3的JAR文件。我应该将这个P3 jar文件包含为P1和P2的依赖项。我创建了一个具有以下结构的composite-build

复合项目

  • P1

    • 的build.gradle
    • settings.gradle
  • P2

    • 的build.gradle
    • settings.gradle
  • P3
    • 的build.gradle
    • settings.gradle

的build.gradle

settings.gradle

复合项目 - > build.gradle:

task run {
    println "Tasks: services"
    dependsOn gradle.includedBuild('P1').task(':run')
    dependsOn gradle.includedBuild('P2).task(':run')
    dependsOn gradle.includedBuild('P3).task(':run')
}

复合项目 - > settings.gradle:

rootProject.name = 'services'
includeBuild 'P1'
includeBuild 'P2'
includeBuild 'P3'

P1 - >的build.gradle

apply plugin: 'war'
defaultTasks 'run'

task run {
   println "Tasks: cluster"
  buildDir = new File(rootProject.projectDir, "gradleBuild/" + project.name)
}

现在,如果我运行'Composite-project'的构建,则会配置所有项目,但不会创建WAR文件和JAR文件。仅当为该项目运行构建时才会创建war文件。如何完成这项任务?

1 个答案:

答案 0 :(得分:0)

我有一个类似的案例并且像这样解决了。

首先为每个项目定义buildAll任务:

task buildAll(type: GradleBuild) {
    tasks = [ 'build' ]
}

然后为复合项目定义根buildAll任务:

task buildAll {
    dependsOn gradle.includedBuilds*.task(':buildAll')
}

之后调用gradle buildAll将构建所有嵌套项目,您将获得所需的构建工件。

另见

GitHub上有the example,我是专门针对这个案例准备的。