Gradle
可以轻松处理各种大小规模的项目。小项目由一个单一的构建文件和一个源代码树构成。 大项目可以将其拆分成更小的,相互依赖的模块,以便更容易理解。
多项目构建的结构特征:
- 在项目的根目录或主目录中都有一个
settings.gradle
文件。 - 根目录或主目录都有一个
build.gradle
文件。 - 具有自己的
build.gradle
构建文件的子目录。
设置:
allprojects 针对所有的子项目和本身起作用,全局设置项。
allprojects { group = 'MavenRoot' version = '0.0.1-SNAPSHOT'}
subprojects针对所有的子项目起作用。
subprojects{ apply plugin: 'java' apply plugin: 'eclipse'}
项目依赖:
// MavenView中添加dependencies { compile project(':MavenCore') compile project(':MavenCommon')}
如果有平级项目之间的依赖MavenView中 settings.gradle:
includeFlat 'MavenCommon'
includeFlat 'MavenCore'
以Maven的多模块项目为例:
在MavenRoot下创建settings.gradle和build.gradle
在settings.gradle 内写子项目:
rootProject.name = 'MavenRoot'include 'MavenCore'include 'MavenCommon'include 'MavenView'
验证子项目:
Colsure cl = {task -> println "I'm $task.project.name"}task hello2 << clproject(":MavenCore"){ task hello2 << cl}project(":MavenView"){ task hello2{ doLast cl }}
在 allProjects中使用:
allprojects { group = 'MavenRoot' version = '0.0.1-SNAPSHOT' task hello2{ description="hello2" doLast { task -> println "$task.project.name" } }}
subProjects中使用:
此时hello2不能再定义task,因同名task只能有一个,因此一旦上面定义了task后面只能对task进行配置
// sub project setttingsubprojects{ apply plugin: 'java' apply plugin: 'eclipse' hello2{ doLast{ task -> println "$task.project.name" } }}
或者:
hello2.doLast{ task -> println "$task.project.name"}
指定单独运行:
project(":MavenView").hello2.doLast{ println "I'm the special one..."}
以上子集的这几个方法必须建立在allprojects中已经构建此hello2任务。
子集建立build.gradle,如果allprojects中已经对子集声明此方法,则子集中不可再构建。
task hello3{ doLast { println "i 'm $task.name" }}
执行报错:> Could not get unknown property 'task' for task ':MavenCore:hello3' of type org
.gradle.api.DefaultTask.因 $默认指向的是project的成员变量,因此task无法找到。
需要切换内部指向为task。
task hello3{ doLast { task -> println "i 'm $task.name" }}
----------------------------------------------------------------------------------------------------------------------------------------------------------------------------
以上为多项目之间的关系说明。
Gradle多项目整合:
- 如何在Gradle中使用其他模块在一个模块中;
- 使用Gradle打包多个模块(输出为:jar,war);
- 在Gradle Tomcat插件上运行Web应用程序;
之前建立了HelloGradle的web应用,下面再建立一个CommonGradle和一个RootGradle。
其中RootGradle为容器,整合CommonGradle和HelloGradle,helloGradle引用CommonGradle。
CommonGradle和RootGradle的建立:
右键->new -> other ->gradle -> gradle project ->[projectName] ->options [local installation diractory][Gradle User home]
->OK
在RootGradle的setting.gradle下创建子项目
rootProject.name = 'RootGradle'include 'CommonGradle'include 'HelloGradle'project(':CommonGradle').projectDir = new File(settingsDir, '../CommonGradle')project(':HelloGradle').projectDir = new File(settingsDir, '../HelloGradle')
build.gradle下创建内容:
apply plugin: 'java'apply plugin: 'eclipse'// In this section you declare where to find the dependencies of your projectrepositories { mavenLocal() maven{ url 'http://maven.aliyun.com/nexus/content/groups/public/' } mavenCentral() jcenter()}allprojects{ group "com.hg" version "1.0.0-SNAPSHOT"}def artifactId="RootGradle"dependencies { compile 'com.google.guava:guava:20.0' testCompile 'junit:junit:4.12' compile project(":HelloGradle") compile project(":CommonGradle")}
HelloGradle的build.gradle中创建:
将CommonGradle中的类用在HelloGradle中
dependencies { compile project(':CommonGradle')}
CommonGradle的build.gradle中创建:
apply plugin: 'java'apply plugin: 'eclipse'
在cmd->RootGradle中
gradle tomcatStart
在文件的build的libs下就有打包成的jar和war文件。