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

时间:2014-12-18 15:21:16

标签: gradle war

我有一个项目被分成两个子项目。

/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')

我的问题如何创建包含子项目和外部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'
}

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

正如您所看到的,我使用了dependencies和自定义copy任务。我不确定什么是正确的gradle方式。我该怎么做?

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

  

gradle docu   来自(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'
}

1 个答案:

答案 0 :(得分:4)

解决方案(干净地关闭这个问题)可耻地从问题的创始人那里获取; - )

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

  

gradle documentation摘录:from(sourcePaths) - 指定源文件或目录   一份副本。给定的路径按照Project.files()进行评估。

Ronny改变了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'
}