在线观看不卡亚洲电影_亚洲妓女99综合网_91青青青亚洲娱乐在线观看_日韩无码高清综合久久

鍍金池/ 教程/ 物聯(lián)網(wǎng)/ 配置子項目
依賴管理實戰(zhàn)
配置遠程倉庫
安裝Gradle
簡介
項目自動化簡介
配置子項目
Gradle強大的特性
自動化測試
簡介
掌握構建生命周期
使用命令行操作
構建Java項目
管理任務
構建工具
連續(xù)傳遞的特性
用Gradle開發(fā)Web項目
聲明依賴
構建塊
簡介
測試Java應用
java構建工具
為什么選擇Gradle
拆分項目文件
單元測試
多項目打包
Gradle 起步
介紹這個Gradle項目
簡介
自定義腳本
Gradle包裝器
簡要概述依賴管理
項目模塊化

配置子項目

到目前為止你已經(jīng)把ToDo項目根據(jù)功能拆分成多個模塊,接下來可以用之前的方法來定義構建邏輯,下面有幾點需要主要:

  • 根目錄和子目錄使用相同的group和version屬性值
  • 所有的子目錄都是Java項目需要Java插件來正常工作,所以你只需要在子項目中應用Java插件
  • web子項目是唯一一個依賴外部庫的項目,它需要打包成WAR而不是JAR
  • 子項目之間可以定義模塊依賴

接下來你將學習如何定義特定的和共有的構建邏輯,怎么樣去避免重復的配置。有些子項目可能依賴其他項目的源代碼,比如repository項目依賴model項目,通過聲明項目依賴可以避免拷貝源代碼。

理解項目的API表示

之前我介紹過項目Project可能會用到的一些API,接下來還有一些API用在多項目構建中。project方法用于聲明指定項目的構建代碼,需要提供項目的路徑,比如:model。有時候你想給所有的項目或者只有子項目定義一些邏輯,你可以使用allprojects和subprojects方法,比如你想給所有的子項目添加Java插件,你需要使用subprojects方法。

http://wiki.jikexueyuan.com/project/gradleIn-action/images/dag43.png" alt="" />

定義項目特有的行為

指定項目的行為通過project方法來定義,為了給三個子項目model、repository、web定義構建邏輯,你需要給它們分別創(chuàng)建一個配置塊。下面build.gradle文件:

    ext.projectIds = ['group': 'com.manning.gia', 'version': '0.1']

    group = projectIds.group
    version = projectIds.version

    project(':model') {
        group = projectIds.group
        version = projectIds.version
        apply plugin: 'java'
    }

    project(':repository') {
        group = projectIds.group
        version = projectIds.version
        apply plugin: 'java'
    }

    project(':web') {
        group = projectIds.group
        version = projectIds.version
        apply plugin: 'java'
        apply plugin: 'war'
        apply plugin: 'jetty'

    repositories {
        mavenCentral()
    }

    dependencies {
        providedCompile 'javax.servlet:servlet-api:2.5'
        runtime 'javax.servlet:jstl:1.1.2'
    }

    }

從整個項目的根目錄那里,你可以執(zhí)行子項目的任務,需要記住項目路徑是通過冒號分隔,比如你想執(zhí)行model子項目的build任務,在命令行中執(zhí)行gradle :modle:build就可以,如下所示:

    $ gradle :model:build
    :model:compileJava
    :model:processResources UP-TO-DATE
    :model:classes
    :model:jar
    :model:assemble
    :model:compileTestJava UP-TO-DATE
    :model:processTestResources UP-TO-DATE
    :model:testClasses UP-TO-DATE
    :model:test
    :model:check
    :model:build

聲明項目依賴

聲明項目依賴和聲明外部依賴非常類似,只需要在dependencies配置塊中聲明,如下所示:

    project(':model') {
    ...
    }

    project(':repository') {
    ...

    dependencies {
        //聲明編譯期依賴項目model
        compile project(':model')

    }

    }

    project(':web') {
    ...

    dependencies {
        //聲明編譯期依賴項目repository
        compile project(':repository')
        providedCompile 'javax.servlet:servlet-api:2.5'
        runtime 'javax.servlet:jstl:1.1.2'
    }

    }

這樣就定義了我們的項目依賴,注意當一個項目依賴于另一個項目時,另一個項目的項目依賴和外部依賴同樣會被添加進來,在構建周期的初始化階段,Gradle決定項目的執(zhí)行順序。

從根目錄的執(zhí)行順序是這樣的:

http://wiki.jikexueyuan.com/project/gradleIn-action/images/dag44.png" alt="" />

有時候你并不需要重新構建那些并未改變的項目,Gradle提供了部分構建partial builds的選項,通過命令行選項-a或者--no-rebuild。比如你只改變了repository項目不想重新構建model子項目,你可以這樣做:gralde :repository:build -a,如下所示:

    $ gradle :repository:build -a
    :repository:compileJava
    :repository:processResources UP-TO-DATE
    :repository:classes
    :repository:jar
    :repository:assemble
    :repository:compileTestJava UP-TO-DATE
    :repository:processTestResources UP-TO-DATE
    :repository:testClasses UP-TO-DATE
    :repository:test
    :repository:check
    :repository:build

定義共同的行為

上面你在所有的子項目中添加了Java插件,給所有的項目添加了一個外部屬性ProjectIds,當你的子項目變得比較多的時候這樣子做可能是個問題,接下來你可以通過allprojects和subprojects方法來改善你的構建代碼。

http://wiki.jikexueyuan.com/project/gradleIn-action/images/dag45.png" alt="" />

這是什么意思?這意味著你可以用allprojects方法給所有的項目添加group和version屬性,由于根項目不需要Java插件,你可以使用subprojects給所有子項目添加Java插件,如下所示:

    allprojects {
        group = 'com.manning.gia'
        version = '0.1'
    }

    subprojects {
        apply plugin: 'java'
    }

    project(':repository') {
        dependencies {
            compile project(':model')
        }
    }

    project(':web') {
        apply plugin: 'war'
        apply plugin: 'jetty'

        repositories {
            mavenCentral()
        }

        dependencies {
            compile project(':repository')
            providedCompile 'javax.servlet:servlet-api:2.5'
            runtime 'javax.servlet:jstl:1.1.2'
        }
    }