Gradle Multi Module jar

时间:2015-11-14 00:36:29

标签: java gradle

我有以下项目配置(纯java):

/
/Base_module
/A_module

A_module依赖于Base_module。

我想要一个 .jar ,其中包含A_module类 + Base_module类,但无法实现。

使用以下配置,我只能为每个模块实现不同的jar:

settings.gradle

include 'Base_module', 'A_module'

的build.gradle

....
project(':Base_module') {
}

project(':A_module') {
    dependencies {
        compile project(':Base_module')
    }
}
....

我需要添加什么来实现完整的 .jar

提前致谢。

2 个答案:

答案 0 :(得分:1)

您可以尝试在根构建脚本中创建Jar类型的自定义任务,该脚本将包括所有子项目的所有类或仅包含许多子项目。它可能类似于:

//declare an array, containing subproject names, which classes you want to collect
def projectsToCollect = [':Base_Module',':A_Module']

//create a custom task, which assembles an jar-archive and depends on subproject compilation tasks, 
//that causes sibprojects sources been compiled before thist task runs
task singleJar( type: Jar , dependsOn: projectsToCollect.collect{ it+":compileJava"}) {
    //set new jar name
    baseName = 'singleJar'
    //set files, which will be included in this new jar
    from files(projectsToCollect.collect{ project(it).sourceSets.main.output })
}

您可以播放它,修改源集,如果您的子项目中有自定义,或者您想要添加测试。

答案 1 :(得分:0)

那将是fatJar又名uberJar又名shadowJar

看看https://github.com/johnrengelman/shadow

您需要为您配置':A_module'项目