Gradle
能够轻松处理各类大小规模的项目。小项目由一个单一的构建文件和一个源代码树构成。 大项目能够将其拆分红更小的,相互依赖的模块,以便更容易理解。java
多项目构建的结构特征:web
settings.gradle
文件。build.gradle
文件。build.gradle
构建文件的子目录。设置:api
allprojects 针对全部的子项目和自己起做用,全局设置项。tomcat
allprojects { group = 'MavenRoot' version = '0.0.1-SNAPSHOT' }
subprojects针对全部的子项目起做用。app
subprojects{ apply plugin: 'java' apply plugin: 'eclipse' }
项目依赖:eclipse
// MavenView中添加 dependencies { compile project(':MavenCore') compile project(':MavenCommon') }
若是有平级项目之间的依赖MavenView中 settings.gradle:maven
includeFlat 'MavenCommon'gradle
includeFlat 'MavenCore'ui
以Maven的多模块项目为例:this
在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 << cl project(":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 settting subprojects{ 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多项目整合:
以前创建了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 project repositories { 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文件。