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

如何在Gradle为复合项目创建WAR?,gradle,buildship,Gradle,Buildship,我正在为Gradle使用EclipseBuildship V2.1.2。我有两个独立的web项目,P1和P2,还有一个项目P3,它作为所有其他项目的依赖项。我的任务是创建一个主构建,我可以用它从P1和P2构建和生成WAR文件,从P3生成JAR文件。我应该包括这个p3jar文件作为P1和P2的依赖项。我创建了一个具有以下结构的复合构建 组合项目 P1 格雷德尔先生 格雷德尔酒店 P2 格雷德尔先生 格雷德尔酒店 P3 格雷德尔先生 格雷德尔酒店 格雷德尔先生 apply plugi

我正在为Gradle使用EclipseBuildship V2.1.2。我有两个独立的web项目,P1和P2,还有一个项目P3,它作为所有其他项目的依赖项。我的任务是创建一个主构建,我可以用它从P1和P2构建和生成WAR文件,从P3生成JAR文件。我应该包括这个p3jar文件作为P1和P2的依赖项。我创建了一个具有以下结构的
复合构建

组合项目

  • P1

    • 格雷德尔先生
    • 格雷德尔酒店
  • P2

    • 格雷德尔先生
    • 格雷德尔酒店
  • P3
    • 格雷德尔先生
    • 格雷德尔酒店
格雷德尔先生

apply plugin: 'war'
defaultTasks 'run'

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

组合项目->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')
}
组合项目->设置.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)
}

现在,如果我运行“复合项目”的构建,所有项目都已配置,但WAR文件和JAR文件未创建。仅当为该项目运行生成时,才会创建war文件。如何完成这项任务

我有一个类似的案例,我就是这样解决的

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

task buildAll(type: GradleBuild) {
    tasks = [ 'build' ]
}
然后为复合项目定义根
buildAll
任务:

task buildAll {
    dependsOn gradle.includedBuilds*.task(':buildAll')
}
之后,调用
gradlebuildall
将构建所有嵌套项目,您将获得所需的构建工件

另请参见


还有一个是我专门为这个案例准备的GitHub。

你需要运行
build
任务来准备工件为什么
run
?我是新手。我假设任务运行已经执行并确认,其中包含打印内容。我还假设将创建在任务运行中给出的构建目录。我是否应该指定新任务来创建战争地点?是否建议使用此项目结构?在eclipse中,将其他项目放置在复合项目中并不会提供包探索结构。或者我应该将所有项目都放在复合项目之外,然后直接引用它吗?使用
run
中的
print
,您应该假设任务是配置的,而不是实际执行的。阅读有关配置与执行的信息。有一个
war
插件,你可以应用它并使用它。您的项目是由eclipse驱动的吗?我使用LunaEclipse4.4。每次运行任务时,我都使用
gradletasks
并右键单击build(复合项目的构建)->rungradletasks。我得到的输出是
:war-update
。但WAR文件未创建。如果我在P1构建中也这样做,我会得到war文件。我是做错了还是每次我需要使用特定项目的构建?