如何基于两个子项目生成war文件

Ron*_*ger 8 war gradle

我有一个项目,分为两个子项目.

/project
   /sub-project-a (backend with JAVA source which is compiled into JAR file)
   /sub-project-b (frontend sources which are compiled with grunt via gradle call)
   build.gradle
   settings.gradle (contains include 'sub-project-a', 'sub-project-b')
Run Code Online (Sandbox Code Playgroud)

我的问题是如何创建包含子项目和外部lib依赖项的War文件?剪切的以下代码是我当前的build.gradle:

apply plugin: 'war'
version '1.0.0'
repositories {
    mavenCentral()
}
dependencies {
    compile project(':sub-project-a')
    compile project(':sub-project-b')
    compile 'com.google.code.gson:gson:2.2.4'
}
task copy(type: Copy) {
    from 'sub-project-a/build', 'sub-project-b/build'
    into 'build'
}
build.dependsOn clean, copy
war {
    archiveName 'project.war'
}
Run Code Online (Sandbox Code Playgroud)

一个细节很重要.java上下文监听器(深入内部项目代码)使用编译后端作为文件WEB-INF/lib夹中的jar文件.这意味着无法从WEB-INF/classes文件夹中轻松使用所有类文件.

正如你所看到的,我玩了dependencies一个自定义copy任务.我不确定什么是正确的gradle方式.我该怎么做?

使用war.from方法定义,获取静态源.

gradle docu from(sourcePaths) - 指定副本的源文件或目录.根据Project.files()评估给定路径.

我改变了build.gradle

apply plugin: 'war'
version '1.0.0'
repositories {
    mavenCentral()
}
dependencies {        
    compile 'com.google.code.gson:gson:2.2.4'
}    
war {
    archiveName 'project.war'
    from 'sub-project-a/build/dist', 'sub-project-b/build/dist'
}
Run Code Online (Sandbox Code Playgroud)

Pie*_*rre 5

解决方案(用于彻底关闭问题),可耻地从问题的发起者那里获取;-)

使用“ war.from”方法定义子项目依赖项,从中获取静态源。

gradle文档摘录:from(sourcePaths)-指定副本的源文件或目录。给定的路径根据Project.files()进行评估。

罗尼的更改build.gradle

apply plugin: 'war'
version '1.0.0'
repositories {
    mavenCentral()
}
dependencies {        
    compile 'com.google.code.gson:gson:2.2.4'
}    
war {
    archiveName 'project.war'
    from 'sub-project-a/build/dist', 'sub-project-b/build/dist'
}
Run Code Online (Sandbox Code Playgroud)