目錄html
Gradle是一個基於Apache Ant和Apache Maven概念的項目自動化建構工具。它使用一種基於Groovy的特定領域語言來聲明項目設置,而不是傳統的XML。——維基java
注:在Maven和Gradle使用上,碰到的問題是引入本地jar
包,Gradle一行代碼就搞定了,而Maven至關麻煩,得一個個引入,沒有找到批量引入的方法。android
位於項目根目錄,用於指示 Gradle 在構建應用時應將哪些模塊包括在內。git
rootProject.name = 'java-toolkit' include 'toolkit-common' include 'toolkit-config' include 'toolkit-model'
在項目根目錄下,經過allprojects{}
將配置應用至整個項目,再經過subprojects{}
將配置應用至整個子模塊中。github
// 全部項目通用配置 allprojects { //引入 idea 插件 apply plugin: 'idea' //指定項目版本號和group version = '2.0' group = 'gradle.multi' idea.module.iml { beforeMerged { module -> module.dependencies.clear() } whenMerged { module -> module.dependencies*.exported = true } } } // 全部子項目的通用配置 subprojects { //引入java插件 apply plugin: 'java' // JVM 版本號要求 sourceCompatibility = 1.6 // java編譯的時候缺省狀態下會由於中文字符而失敗,因此這兒須要改成utf8 [compileJava, compileTestJava]*.options*.encoding = 'UTF-8' repositories { //本地庫,local repository(${user.home}/.m2/repository) mavenLocal() //Maven中心庫(http://repo1.maven.org/maven2) mavenCentral() } jar { manifest.attributes provider: 'gradle' } configurations { ... } dependencies { // 通用依賴 compile( ... ) // 測試依賴 testCompile( ... ) } } //若是module中名稱有包含web的,則加入下面的內容 configure(subprojects.findAll {it.name.contains('web')}) { apply plugin: 'war' apply plugin: 'jetty' war { manifest { attributes("Implementation-Title": "Gradle") } } }
在子模塊中,單獨配置特有的構建需求。web
// jar或者war的名字 archivesBaseName = 'module1' dependencies { compile ( ... ) }
Gradle某些全局參數的配置或者能夠自定義Gradle文件中用到的變量,在構建腳本中使用${xxx}
就能夠訪問該文件中定義的相關值。spring
env=dev springVersion=4.3.16.RELEASE servletApiVersion = 3.1.0 jacksonVersion=2.8.6 junitVersion=4.12 log4jVersion=2.10.0 hibernateCoreVersion=5.2.1.Final hibernateEntityManagerVersion=5.2.1.Final hibernateValidatorVersion=5.2.4.Final hibernateJava8Version=5.2.1.Final
dependencies { // 批量引入本地`jar`包 implementation fileTree(dir: 'libs', include: ['*.jar']) // 引入本地指定`jar`包 implementation files('libs/foo.jar', 'libs/bar.jar') // 引入遠程包 implementation group: 'org.slf4j', name: 'slf4j-simple', version: '1.7.25' // 縮寫以下 //implementation 'org.slf4j:slf4j-simple:1.7.25' }
多模塊建立,是對項目代碼進行職責分工,模塊之間經過gradle或maven來管理繼承和聚合,方便代碼的解耦和重用,以及模塊的編譯、發佈;apache
- GroupID 是項目組織惟一的標識符,實際對應JAVA的包的結構,是main目錄裏java的目錄結構,第一段爲域,第二段爲公司名稱,域又分爲org、com、cn等等許多,其中org爲非營利組織,com爲商業組織。如
com.me.moduleName
。- ArtifactID是項目的惟一的標識符,實際對應項目的名稱,就是項目根目錄的名稱。
接下來,一路按默認點擊「下一步」,直至完成,獲得下面的項目結構:
app
按如下步驟,依次建立子模塊toolkit-common
、toolkit-config
、toolkit-model
。
jvm
爲何要寫這篇記錄文檔?
由於在剛開始建立時,我不是建立空項目,在第一步建立項目時,勾選了java,此時生成的項目就會帶有src結構,如
java-toolkit - src - - main
爲了建立最終效果的項目結構,我便手動刪除了父目錄的src,此時問題就出來了,每次新建子模塊,父目錄的src就會自動生成出來。
解決方案是:修改父目錄下的build.gradle的默認配置,原數據以下:
plugins { id 'java' } group 'com.vip.toolkit' version '1.0-SNAPSHOT' sourceCompatibility = 1.8 repositories { mavenCentral() } dependencies { testCompile group: 'junit', name: 'junit', version: '4.12' }
修改以下:
allprojects { group 'com.vip.toolkit' version '1.0-SNAPSHOT' repositories { // 本地庫,local repository(${user.home}/.m2/repository) mavenLocal() // Maven中心庫(http://repo1.maven.org/maven2) mavenCentral() // 指定Maven庫位置 maven { url "http://repo.maven.apache.org/maven2" } } } subprojects { // 引入java插件 apply plugin: 'java' // 指定jvm版本 sourceCompatibility = 1.8 targetCompatibility = 1.8 // java編譯的時候缺省狀態下會由於中文字符而失敗,因此這兒須要改成utf8 [compileJava, compileTestJava]*.options*.encoding = 'UTF-8' dependencies { testCompile group: 'junit', name: 'junit', version: '4.12' } }
參考:https://michaelliuyang.github.io/projectsupport/2014/11/04/gradle-multi-project.html
https://developer.android.com/studio/build/dependencies