示例程序拥有两个模块:
     core模块包含一些通用的组件,它们能够被程序的其他模块使用。例子中,只包含一个类:MessageService类返回‘Hello World!’字符串。该模块有两个依赖:Junit 4.11与commons-lang3。
     app模块包含HelloWorld类,是程序的开端,它从MessageService对象中获取信息,并将接收到的信息写入一个日志文件中。该模块拥有两个依赖:它需要core模块,还使用Log4j作为日志。

下面,我们将创建一个多项目的Gradle构建,包括两个子项目:app 和 core。首先肯定是创建项目multiproject根目录。

1.在根目录下建立模块的目录并配置build.gradle文件
首先需要创建两个模块对应的目录:app、core。分别在对应的目录创建build.gradle文件并配置:

apply plugin: 'java'

repositories {
    mavenCentral()
}

task "mkdirs" << {
    sourceSets*.java.srcDirs*.each { it.mkdirs() }
    sourceSets*.resources.srcDirs*.each { it.mkdirs() }
}

分别运行gradle mkdirs任务会自动创建好src目录。



2.对包含在多项目构建中的项目进行配置


可以通过以下步骤,对包含在多项目构建中的项目进行配置:在根项目的根目录下创建settings.gradle文件,它指明了那些包含在多项目构建中的项目。


settings.gradle配置如下:


rootProject.name = 'multiproject'
include 'app','core'



3.配置core模块的build.gradle


apply plugin: 'java'

repositories {
    mavenCentral()
}

dependencies {
    compile 'org.apache.commons:commons-lang3:3.4'
    testCompile group: 'junit', name: 'junit', version: '4.11'
}

task "mkdirs" << {
    sourceSets*.java.srcDirs*.each { it.mkdirs() }
    sourceSets*.resources.srcDirs*.each { it.mkdirs() }
}



4.配置app模块的build.gradle


首先先说下,如果多项目构建拥有项目A和B,同时,项目B的编译需要项目A,可以通过在项目B的build.gradle文件中添加以下依赖声明来进行依赖配置。dependencies { compile project(:A)}


故app项目的build.gradle文件如下:


apply plugin: 'java'

repositories {
    mavenCentral()
}

dependencies {
    compile 'log4j:log4j:1.2.17'
    compile project(':core')
    testCompile group: 'junit', name: 'junit', version: '4.11'
}

jar {
    from {
        configurations.compile.collect {
            it.isDirectory() ? it : zipTree(it)
        }
    }

    manifest {
        attributes 'Main-Class': 'org.zero.HelloWorld'
    }
}

直接运行任务gradle build,在app目录下build/libs/会生成app.jar的可执行的jar文件,java –jar app.jar即可运行app程序。



5.移除重复配置


当对多项目构建中的子项目进行配置时,在core和app项目的构建脚本中添加了重复的配置。都使用Java插件、都使用Maven2中央仓库等。


可以将这项配置转移到根项目的build.gradle文件中,在此之前,必须先学习一下如何在根项目的build.gradle文件中配置子项目。


 如果想要在一个称为core的子项目中添加配置,那么就必须在根项目的build.gradle文件中添加以下片段:


project(:core) {
       //Add core specific configuration here
}

换句话说,如果想要将重复的配置转移到根项目的构建脚本中,就必须将以下配置添加到build.gradle文件中:


project(:app) {
	apply plugin: java;
	repositories {
		mavenCentral()
	}
}

project(:core) {
	apply plugin: java;
	repositories {
		mavenCentral()
	}
}

不过这种做法在实质上并没有改变什么,在构建脚本中依然还存在重复配置,唯一的区别是重复配置现在转移到了根项目的build.gradle文件中。


如果想要在根项目的子项目中添加通用的配置,需要将以下片段添加到根项目的build.gradle文件中:


subprojects {
	//Add common configuration here
}

于是在根项目的build.gradle文件可以这样修改:


subprojects {
    apply plugin: 'java'

    repositories {
        mavenCentral()
    }
    dependencies {
        testCompile group: 'junit', name: 'junit', version: '4.11'
    }

    task "mkdirs" << {
        sourceSets*.java.srcDirs*.each { it.mkdirs() }
        sourceSets*.resources.srcDirs*.each { it.mkdirs() }
    }
}

此时app、core会拥有同subprojects内容一样的配置。



如果配置项是被多项目构建中的所有项目所共享的,那么也可以在根项目的build.gradle文件中添加以下片段:


allprojects {
	//Add configuration here
}



参考:http://blog.jobbole.com/84471/