用gradle启动java项目_构建Java项目
#構(gòu)建Java項(xiàng)目#
上一節(jié)我們簡(jiǎn)要介紹了如何編寫(xiě)一個(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)該是這樣的:
##構(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)該是類(lèi)似這樣的:
$ 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)該是類(lèi)似這樣的:
在項(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)該很類(lèi)似。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
總結(jié)
以上是生活随笔為你收集整理的用gradle启动java项目_构建Java项目的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 首销火速破亿!moto edge X30
- 下一篇: java美元兑换,(Java实现) 美元