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文件。