關於項目模塊化:java
在企業項目中,包層次和類關係比較複雜,把代碼拆分紅模塊一般是最佳實踐,這須要你清晰的劃分功能的邊界,好比把業務邏輯層和數據持久化層拆分開來。項目符合高內聚低耦合時,模塊化就變得很容易,這是一條很是好的軟件開發實踐app
一般在使用Maven構建項目的時候,咱們會將一個項目劃分爲多個模塊,而後經過父工程去管理子模塊。而 Gradle 也擁有相似的功能,咱們將其稱之爲多項目構建(multi-project build)。因此本小節咱們來看看,如何使用 Gradle 進行多項目構建,首先建立一個Gradle工程,過程以下:
maven
自定義GroupId和ArtifactId:
ide
選擇本地的Gradle:
模塊化
項目建立完成後,目錄結構以下:
gradle
build.gradle構建腳本的內容以下:ui
plugins { id 'java' } group 'org.zero.example' version '1.0-SNAPSHOT' sourceCompatibility = 1.8 repositories { mavenCentral() } dependencies { testCompile group: 'junit', name: 'junit', version: '4.12' }
setting.gradle文件的內容以下:url
rootProject.name = 'gradle-model'
而後在gradle-model基礎上建立多個模塊,和建立gradle項目是同樣的,這裏以 dao 、pojo 和 service 模塊爲例。建立好後工程目錄結構以下:
插件
注:父工程的src目錄能夠刪除掉3d
從上圖中能夠看到子模塊中是沒有setting.gradle文件的,而此時父工程的setting.gradle文件的內容以下:
rootProject.name = 'gradle-model' include 'dao' include 'service' include 'pojo'
不難看出,gradle的setting.gradle文件導入了子模塊,因此它用來管理父工程包含哪些子模塊
此時,咱們會發現父工程與子模塊的build.gradle構建腳本的內容都是同樣的,以下:
subprojects 方法能夠設定全部子模塊共享的配置,例如:全部模塊都引入 java 插件、 repositories中配置的倉庫以及依賴包和版本等。這樣咱們就能夠將一些配置複用起來,那麼就不須要每一個子模塊的build.gradle裏都寫同樣的配置了。以下:
pojo模塊由於不須要依賴外部的jar包,因此複用父工程的配置後能夠留空,而dao依賴於pojo,因此須要單獨配置一下依賴,service也是同理。gradle子模塊引用另外一個子模塊時,須要使用project方法,與引用外部依賴是不一樣的。
在上一小節中,咱們完成了最簡單的多項目構建,本小節則介紹一下如何將項目發佈到本地的Maven倉庫中,這也是比較常見的需求。由於有些項目須要依賴別的項目,又沒有搭建私服的狀況下,就只能發佈到本地倉庫,而後在別的項目去依賴本地倉庫中的jar包。Gradle發佈項目到本地及遠程Maven倉庫的流程:
修改build.gradle構建腳本的內容以下,引用maven的發佈插件:
// allprojects用於定義全部項目的配置 allprojects { apply plugin: 'maven-publish' apply plugin: 'java' sourceCompatibility = 1.8 group 'org.zero.example' version '1.0-SNAPSHOT' repositories { mavenCentral() } dependencies { testCompile group: 'junit', name: 'junit', version: '4.12' } publishing { publications { myPublish(MavenPublication){ from components.java } } } }
在構建腳本里引用了maven的發佈插件後,此時gradle的控制檯就會出現publishing選項,點擊下圖中的publishToMavenLocal便可發佈到本地maven倉庫中:
發佈成功後,能夠在本地倉庫中查找到相應的目錄:
以及jar包:
若是須要發佈到私服上的話,能夠配置私服地址,以下示例:
publishing { publications { myPublish(MavenPublication){ from components.java } } repositories { maven { url 'http://example.com' } } }
而後點擊publishing選項下的publish就能夠進行發佈了,但因爲我這裏沒有現成的私服,就不對此作演示了