Gradle 多項目構建

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多項目整合:

  • 如何在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 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文件。

相關文章
相關標籤/搜索