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

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

構(gòu)建Java項(xiàng)目

上一節(jié)我們簡(jiǎn)要介紹了如何編寫一個(gè)單機(jī)的To Do應(yīng)用,接下來(lái)要打包部署成可執(zhí)行的應(yīng)用,我們需要編譯源代碼,生成的class文件需要打包到JAR文件中。JDK提供了javac 和jar工具幫助你實(shí)現(xiàn)這些任務(wù),但是你也不想每次源代碼發(fā)生變化時(shí)你都手動(dòng)去執(zhí)行這些任務(wù)吧。

Gradle插件能夠自動(dòng)化完成這些任務(wù),插件引入了一些領(lǐng)域特有的觀念,其中一個(gè)Gradle插件就是java插件,Java插件不僅僅只有編譯和打包的功能,它給你的項(xiàng)目安排了一個(gè)標(biāo)準(zhǔn)布局,并確保你所有的任務(wù)都是按序執(zhí)行,現(xiàn)在該應(yīng)用java插件來(lái)構(gòu)建你的build腳本了。

使用java插件

每個(gè)Gradle項(xiàng)目都會(huì)創(chuàng)建一個(gè)build.gradle文件,如果你想使用java插件只需要添加下面這行代碼:

    apply plugin: 'java'

這一行代碼足以構(gòu)建你的項(xiàng)目,但是Gradle怎么知道你的源代碼放在哪個(gè)位置呢?java插件的一個(gè)約定就是源代碼的位置,默認(rèn)情況下插件搜索src/main/java路徑下的文件,你的包名com.manning.gia.todo會(huì)轉(zhuǎn)換成源代碼根目錄下的子目錄,創(chuàng)建build腳本之后你的項(xiàng)目結(jié)構(gòu)應(yīng)該是這樣的:

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

構(gòu)建項(xiàng)目

現(xiàn)在你可以構(gòu)建你的項(xiàng)目了,java插件添加了一個(gè)build任務(wù)到你項(xiàng)目中,build任務(wù)編譯你的代碼、運(yùn)行測(cè)試然后打包成jar文件,所有都是按序執(zhí)行的。運(yùn)行g(shù)radle build之后你的輸出應(yīng)該是類似這樣的:

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

輸出的每一行都表示一個(gè)可執(zhí)行的任務(wù),你可能注意到有一些任務(wù)標(biāo)記為UP_TO-DATE,這意味著這些任務(wù)被跳過(guò)了,gradle能夠自動(dòng)檢查哪些部分沒(méi)有發(fā)生改變,就把這部分標(biāo)記下來(lái),省的重復(fù)執(zhí)行。在大型的企業(yè)項(xiàng)目中可以節(jié)省不少時(shí)間。執(zhí)行完gradle build之后項(xiàng)目結(jié)構(gòu)應(yīng)該是類似這樣的:

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

在項(xiàng)目的根目錄你可以找到一個(gè)build目錄,這里包含了所有的輸出,包含class文件,測(cè)試報(bào)告,打包的jar文件,以及一些用來(lái)歸檔的臨時(shí)文件。如果你之前使用過(guò)maven,它的標(biāo)準(zhǔn)輸出是target,這兩個(gè)結(jié)構(gòu)應(yīng)該很類似。jar文件目錄build/libs下可以直接運(yùn)行,jar文件的名稱直接由項(xiàng)目名稱得來(lái)的,這里是todo-app。

運(yùn)行項(xiàng)目

你只需要使用JDK的java命令就可以執(zhí)行這個(gè)應(yīng)用了:

    $ java -cp build/classes/main com.manning.gia.todo.ToDoApp
    --- To Do Application ---
    Please make a choice:
    (a)ll items
    (f)ind a specific item
    (i)nsert a new item
    (u)pdate an existing item
    (d)elete an existing item
    (e)xit
    >

接下來(lái)我們會(huì)學(xué)習(xí)如何自定義項(xiàng)目結(jié)構(gòu)。

自定義你的項(xiàng)目

Java插件是一個(gè)非常固執(zhí)的框架,對(duì)于項(xiàng)目很多的方面它都假定有默認(rèn)值,比如項(xiàng)目布局,如果你看待世界的方法是不一樣的,Gradle給你提供了一個(gè)自定義約定的選項(xiàng)。想知道哪些東西是可以配置的?可以參考這個(gè)手冊(cè):http://www.gradle.org/docs/current/dsl/,之前提到過(guò),運(yùn)行命令行g(shù)radle properties可以列出可配置的標(biāo)準(zhǔn)和插件屬性以及他們的默認(rèn)值。

修改你的項(xiàng)目和插件屬性

接下來(lái)你將學(xué)習(xí)如何指定項(xiàng)目的版本號(hào)、Java源代碼的兼容級(jí)別,前面你用的java命令來(lái)運(yùn)行應(yīng)用程序,你需要通過(guò)命令行選項(xiàng)-cp build/classes/main指定class文件的位置給Java運(yùn)行時(shí)。但是要從JAR文件中啟動(dòng)應(yīng)用,你需要在manifest文件MANIFEST.MF中包含首部Main-Class??聪旅娴哪_本你就明白怎么操作了:

    //Identifies project’sversion through a number scheme
    version = 0.1

    //Sets Java version compilation compatibility to 1.6
    sourceCompatibility = 1.6

    //Adds Main-Class header to JAR file’s manifest

    jar {
    manifest {
        attributes 'Main-Class': 'com.manning.gia.todo.ToDoApp'
    }
    }

打包成JAR之后,你會(huì)發(fā)現(xiàn)JAR文件的名稱變成了todo-app-0.1.jar,這個(gè)jar包含了main-class首部,你就可以通過(guò)命令java -jar build/libs/todo-app-0.1.jar運(yùn)行了。

接下來(lái)學(xué)習(xí)如何改變項(xiàng)目的默認(rèn)布局:

    //Replaces conventional source code directory with list of different directories

    sourceSets {
        main {
            java {
                srcDirs = ['src']
            }
        }
    //Replaces conventional test source code directory with list of different directories   

        test {
            java {
                srcDirs = ['test']
                }
            }
    }

    //Changes project output property to directory out

    buildDir = 'out'

配置和使用外部依賴

在Java世界里,依賴是分布的以JAR文件的形式存在,許多庫(kù)都從倉(cāng)庫(kù)里獲得,比如一個(gè)文件系統(tǒng)或中央服務(wù)器。Gradle需要你指定至少一個(gè)倉(cāng)庫(kù)作為依賴下載的地方,比如mavenCentral: //Shortcut notation for configuring Maven Central 2 repository accessible under http://repo1.maven.org/maven2

    repositories {
        mavenCentral()
    }

定義依賴

接下來(lái)就是定義依賴,依賴通過(guò)group標(biāo)識(shí),name和version來(lái)確定,比如下面這個(gè):

    dependencies {
        compile group: 'org.apache.commons', name: 'commons-lang3', version: '3.1'
    }

Gradle是通過(guò)配置來(lái)給依賴分組,Java插件引入的一個(gè)配置是compile,你可以很容易區(qū)分這個(gè)配置定義的依賴是用來(lái)編譯源代碼的。

解析依賴

Gradle能夠自動(dòng)檢測(cè)并下載項(xiàng)目定義的依賴:

    $ gradle build
    :compileJava
    Download http://repo1.maven.org/maven2/org/apache/commons/commons-lang3/3.1/commons-lang3-3.1.pom

    Download http://repo1.maven.org/maven2/org/apache/commons/commons-parent/22/commons-parent-22.pom

    Download http://repo1.maven.org/maven2/org/apache/apache/9/apache-9.pom
    Download http://repo1.maven.org/maven2/org/apache/commons/commons-lang3/3.1/commons-lang3-3.1.jar

    :processResources UP-TO-DATE
    ...
    :build