Gradle多項目構建與jar包發佈

Gradle多項目構建

關於項目模塊化:java

在企業項目中,包層次和類關係比較複雜,把代碼拆分紅模塊一般是最佳實踐,這須要你清晰的劃分功能的邊界,好比把業務邏輯層和數據持久化層拆分開來。項目符合高內聚低耦合時,模塊化就變得很容易,這是一條很是好的軟件開發實踐app

一般在使用Maven構建項目的時候,咱們會將一個項目劃分爲多個模塊,而後經過父工程去管理子模塊。而 Gradle 也擁有相似的功能,咱們將其稱之爲多項目構建(multi-project build)。因此本小節咱們來看看,如何使用 Gradle 進行多項目構建,首先建立一個Gradle工程,過程以下:
Gradle多項目構建與jar包發佈maven

自定義GroupId和ArtifactId:
Gradle多項目構建與jar包發佈ide

選擇本地的Gradle:
Gradle多項目構建與jar包發佈模塊化

項目建立完成後,目錄結構以下:
Gradle多項目構建與jar包發佈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 模塊爲例。建立好後工程目錄結構以下:
Gradle多項目構建與jar包發佈插件

注:父工程的src目錄能夠刪除掉3d

從上圖中能夠看到子模塊中是沒有setting.gradle文件的,而此時父工程的setting.gradle文件的內容以下:

rootProject.name = 'gradle-model'
include 'dao'
include 'service'
include 'pojo'

不難看出,gradle的setting.gradle文件導入了子模塊,因此它用來管理父工程包含哪些子模塊

此時,咱們會發現父工程與子模塊的build.gradle構建腳本的內容都是同樣的,以下:
Gradle多項目構建與jar包發佈

subprojects 方法能夠設定全部子模塊共享的配置,例如:全部模塊都引入 java 插件、 repositories中配置的倉庫以及依賴包和版本等。這樣咱們就能夠將一些配置複用起來,那麼就不須要每一個子模塊的build.gradle裏都寫同樣的配置了。以下:
Gradle多項目構建與jar包發佈

pojo模塊由於不須要依賴外部的jar包,因此複用父工程的配置後能夠留空,而dao依賴於pojo,因此須要單獨配置一下依賴,service也是同理。gradle子模塊引用另外一個子模塊時,須要使用project方法,與引用外部依賴是不一樣的。


將項目發佈到本地Maven倉庫

在上一小節中,咱們完成了最簡單的多項目構建,本小節則介紹一下如何將項目發佈到本地的Maven倉庫中,這也是比較常見的需求。由於有些項目須要依賴別的項目,又沒有搭建私服的狀況下,就只能發佈到本地倉庫,而後在別的項目去依賴本地倉庫中的jar包。Gradle發佈項目到本地及遠程Maven倉庫的流程:
Gradle多項目構建與jar包發佈

修改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倉庫中:
Gradle多項目構建與jar包發佈

發佈成功後,能夠在本地倉庫中查找到相應的目錄:
Gradle多項目構建與jar包發佈

以及jar包:
Gradle多項目構建與jar包發佈

若是須要發佈到私服上的話,能夠配置私服地址,以下示例:

publishing {
    publications {
        myPublish(MavenPublication){
            from components.java
        }
    }
    repositories {
        maven {
            url 'http://example.com' 
        }
    }
}

而後點擊publishing選項下的publish就能夠進行發佈了,但因爲我這裏沒有現成的私服,就不對此作演示了

相關文章
相關標籤/搜索