Idea中Gradle使用及多模塊建立.md

1、 Gradle使用

Gradle是一個基於Apache Ant和Apache Maven概念的項目自動化建構工具。它使用一種基於Groovy的特定領域語言來聲明項目設置,而不是傳統的XML。——維基java

  1. 自動處理包相依關係 - 取自 Maven Repos 的概念
  2. 自動處理佈署問題 - 取自 Ant 的概念
  3. 條件判斷寫法直覺 - 使用 Groovy 語言

注:在Maven和Gradle使用上,碰到的問題是引入本地jar包,Gradle一行代碼就搞定了,而Maven至關麻煩,得一個個引入,沒有找到批量引入的方法。android

1. settings.gradle

位於項目根目錄,用於指示 Gradle 在構建應用時應將哪些模塊包括在內。git

rootProject.name = 'java-toolkit'
include 'toolkit-common'
include 'toolkit-config'
include 'toolkit-model'

2. build.gradle(parent)

在項目根目錄下,經過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")
        }
    }
}

3. build.gradle(child module)

在子模塊中,單獨配置特有的構建需求。web

// jar或者war的名字
archivesBaseName = 'module1'

dependencies {

    compile (
        ...
    ) 
}

4. gradle.properties

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
  1. 添加依賴包
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'
}

2、多模塊建立

多模塊建立,是對項目代碼進行職責分工,模塊之間經過gradle或maven來管理繼承和聚合,方便代碼的解耦和重用,以及模塊的編譯、發佈;apache

1. 先建立一個空項目:

image.png

image.png

  • GroupID 是項目組織惟一的標識符,實際對應JAVA的包的結構,是main目錄裏java的目錄結構,第一段爲域,第二段爲公司名稱,域又分爲org、com、cn等等許多,其中org爲非營利組織,com爲商業組織。如com.me.moduleName
  • ArtifactID是項目的惟一的標識符,實際對應項目的名稱,就是項目根目錄的名稱。

接下來,一路按默認點擊「下一步」,直至完成,獲得下面的項目結構:
image.pngapp

2. 建立子模塊

按如下步驟,依次建立子模塊toolkit-commontoolkit-configtoolkit-model
image.png
image.png
image.pngjvm

3. 最終項目結構

image.png

4. 問題記錄

爲何要寫這篇記錄文檔?

由於在剛開始建立時,我不是建立空項目,在第一步建立項目時,勾選了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

相關文章
相關標籤/搜索