摘要:要從頭開始,請(qǐng)繼續(xù)使用構(gòu)建。文件夾應(yīng)包含項(xiàng)目運(yùn)行單元測(cè)試的報(bào)告。由于該項(xiàng)目尚未進(jìn)行任何單元測(cè)試,因此該報(bào)告無效。使用構(gòu)建項(xiàng)目是啟動(dòng)構(gòu)建的首選方式。現(xiàn)在可用于構(gòu)建項(xiàng)目。概要恭喜您現(xiàn)在已經(jīng)創(chuàng)建了一個(gè)簡(jiǎn)單而有效的構(gòu)建文件,用于構(gòu)建項(xiàng)目。
本指南將引導(dǎo)您使用Gradle構(gòu)建一個(gè)簡(jiǎn)單的Java項(xiàng)目。
你要構(gòu)建什么
您將創(chuàng)建一個(gè)簡(jiǎn)單的應(yīng)用程序,然后使用Gradle構(gòu)建它。
你需要什么
大約15分鐘
最喜歡的文本編輯器或IDE
JDK 6或更高版本
如何完成本指南
與大多數(shù)Spring入門指南一樣,您可以從頭開始并完成每個(gè)步驟,或者您可以繞過您已熟悉的基本設(shè)置步驟。無論哪種方式,您最終都會(huì)使用工作代碼。
要從頭開始,請(qǐng)繼續(xù)使用Gradle構(gòu)建。
要跳過基礎(chǔ)知識(shí),請(qǐng)執(zhí)行以下操作:
下載并解壓縮本指南的源存儲(chǔ)庫(kù),或使用Git克隆它:
git clone https://github.com/spring-guides/gs-gradle.git
進(jìn)入gs-gradle/initial
跳轉(zhuǎn)到安裝Gradle。
完成后,可以根據(jù)gs-gradle/complete中的代碼檢查結(jié)果。
設(shè)置項(xiàng)目
首先,您要為Gradle建立一個(gè)Java項(xiàng)目。為了保持對(duì)Gradle的關(guān)注,讓項(xiàng)目盡可能簡(jiǎn)單。
創(chuàng)建目錄結(jié)構(gòu)
在您選擇的項(xiàng)目目錄中,創(chuàng)建以下子目錄結(jié)構(gòu);例如,在*nix系統(tǒng)上使用mkdir -p src/main/java/hello:
└── src └── main └── java └── hello
在src/main/java/hello目錄中,您可以創(chuàng)建所需的任何Java類。為了簡(jiǎn)單起見并與本指南的其余部分保持一致,Spring建議您創(chuàng)建兩個(gè)類:HelloWorld.java和Greeter.java。
src/main/java/hello/HelloWorld.java
package hello; public class HelloWorld { public static void main(String[] args) { Greeter greeter = new Greeter(); System.out.println(greeter.sayHello()); } }
src/main/java/hello/Greeter.java
package hello; public class Greeter { public String sayHello() { return "Hello world!"; } }
安裝Gradle
現(xiàn)在您有了一個(gè)可以使用Gradle構(gòu)建的項(xiàng)目,您就可以安裝Gradle了。
強(qiáng)烈建議使用安裝程序:
SDKMAN
Homebrew(brew install gradle)
最后,如果這些工具都不適合您的需要,您可以從http://www.gradle.org/downloads下載二進(jìn)制文件。只有二進(jìn)制文件是必需的,所以要查找到gradle-version-bin.zip 的鏈接。(您也可以選擇gradle-version-all.zip以獲取源代碼和文檔以及二進(jìn)制文件。)
將文件解壓縮到您的計(jì)算機(jī),然后將bin文件夾添加到您的路徑中。
要測(cè)試Gradle安裝,請(qǐng)從命令行運(yùn)行Gradle:
gradle
如果一切順利,您會(huì)看到一條歡迎信息:
:help Welcome to Gradle 2.3. To run a build, run gradle... To see a list of available tasks, run gradle tasks To see a list of command-line options, run gradle --help BUILD SUCCESSFUL Total time: 2.675 secs
您現(xiàn)在安裝了Gradle。
了解Gradle可以做些什么
現(xiàn)在已經(jīng)安裝了Gradle,看看它能做什么。在為項(xiàng)目創(chuàng)建build.gradle文件之前,您可以詢問它可用的任務(wù):
gradle tasks
您應(yīng)該看到可用任務(wù)列表。假設(shè)您在沒有build.gradle文件的文件夾中運(yùn)行Gradle ,您將看到一些非?;镜娜蝿?wù),例如:
:tasks == All tasks runnable from root project == Build Setup tasks setupBuild - Initializes a new Gradle build. [incubating] == Help tasks dependencies - Displays all dependencies declared in root project "gs-gradle". dependencyInsight - Displays the insight into a specific dependency in root project "gs-gradle". help - Displays a help message projects - Displays the sub-projects of root project "gs-gradle". properties - Displays the properties of root project "gs-gradle". tasks - Displays the tasks runnable from root project "gs-gradle". To see all tasks and more detail, run with --all. BUILD SUCCESSFUL Total time: 3.077 secs
即使這些任務(wù)可用,但如果沒有項(xiàng)目構(gòu)建配置,它們也不會(huì)提供太多價(jià)值。當(dāng)你充實(shí)build.gradle文件時(shí),一些任務(wù)會(huì)更有用。在添加build.gradle插件時(shí),任務(wù)列表會(huì)增加,因此您偶爾會(huì)想要再次運(yùn)行任務(wù)以查看可用的任務(wù)。
說到添加插件,接下來添加一個(gè)啟用基本Java構(gòu)建功能的插件。
構(gòu)建Java代碼
從簡(jiǎn)單的build.gradle開始,在本指南開頭創(chuàng)建的中創(chuàng)建一個(gè)非常基本的文件。只給它一行
apply plugin: "java"
構(gòu)建配置中的這一行帶來了大量功率。再次運(yùn)行gradle tasks,您會(huì)看到添加到列表中的新任務(wù),包括構(gòu)建項(xiàng)目,創(chuàng)建JavaDoc和運(yùn)行測(cè)試的任務(wù)。
您將經(jīng)常使用gradle build。此任務(wù)將代碼編譯,測(cè)試并組裝到JAR文件中。你可以像這樣運(yùn)行它:
gradle build
幾秒鐘后,“BUILD SUCCESSFUL”表示構(gòu)建已完成。
要查看構(gòu)建工作的結(jié)果,請(qǐng)查看構(gòu)建文件夾。在那里你會(huì)找到幾個(gè)目錄,包括這三個(gè)值得注意的文件夾:
classes:該項(xiàng)目已編譯的.class文件。
reports:構(gòu)建生成的報(bào)告(例如測(cè)試報(bào)告)。
libs:匯編的項(xiàng)目庫(kù)(通常是JAR和/或WAR文件)。
classes文件夾具有通過編譯Java代碼生成的.class文件。具體來說,您應(yīng)該找到HelloWorld.class和Greeter.class。
此時(shí),項(xiàng)目沒有任何庫(kù)依賴項(xiàng),因此dependency_cache文件夾中沒有任何內(nèi)容。
reports文件夾應(yīng)包含項(xiàng)目運(yùn)行單元測(cè)試的報(bào)告。由于該項(xiàng)目尚未進(jìn)行任何單元測(cè)試,因此該報(bào)告無效。
libs文件夾應(yīng)包含以項(xiàng)目文件夾命名的JAR文件。再往下,您將看到如何指定JAR的名稱及其版本。
聲明依賴項(xiàng)
簡(jiǎn)單的Hello World示例是完全獨(dú)立的,不依賴于任何其他庫(kù)。但是,大多數(shù)應(yīng)用程序依賴于外部庫(kù)來處理常見或復(fù)雜的功能。
例如,假設(shè)除了說“Hello World!”之外,您還希望應(yīng)用程序打印當(dāng)前日期和時(shí)間。您可以使用本機(jī)Java庫(kù)中的日期和時(shí)間工具,但是通過使用Joda Time庫(kù)可以使事情變得更有趣。
首先,將HelloWorld.java更改為如下所示:
package hello; import org.joda.time.LocalTime; public class HelloWorld { public static void main(String[] args) { LocalTime currentTime = new LocalTime(); System.out.println("The current local time is: " + currentTime); Greeter greeter = new Greeter(); System.out.println(greeter.sayHello()); } }
這里HelloWorld使用Joda Time的LocalTime類來獲取和打印當(dāng)前時(shí)間。
如果您現(xiàn)在運(yùn)行gradle build來構(gòu)建項(xiàng)目,那么構(gòu)建將失敗,因?yàn)槟鷽]有在構(gòu)建中將Joda Time聲明為編譯依賴項(xiàng)。
對(duì)于初學(xué)者,您需要為第三方庫(kù)添加源。
repositories { mavenCentral() }
repositories塊指示構(gòu)建應(yīng)從Maven Central存儲(chǔ)庫(kù)解析其依賴關(guān)系。Gradle嚴(yán)重依賴Maven構(gòu)建工具建立的許多約定和工具,包括使用Maven Central作為庫(kù)依賴關(guān)系源的選項(xiàng)。
現(xiàn)在我們已經(jīng)為第三方庫(kù)做好了準(zhǔn)備,讓我們宣布一些。
sourceCompatibility = 1.8 targetCompatibility = 1.8 dependencies { compile "joda-time:joda-time:2.2" testCompile "junit:junit:4.12" }
使用dependencies塊,您可以為Joda Time聲明一個(gè)依賴項(xiàng)。具體來說,你在joda-time組中要求(從右到左閱讀)joda-time庫(kù)2.2版。
關(guān)于這種依賴關(guān)系的另一個(gè)注意事項(xiàng)是它是一個(gè)compile依賴項(xiàng),表明它應(yīng)該在編譯時(shí)可用(如果你正在構(gòu)建一個(gè)WAR文件,包含在WAR的/WEB-INF/libs文件夾中)。其他值得注意的依賴類型包括:
providedCompile。編譯項(xiàng)目代碼所需的依賴項(xiàng),但是運(yùn)行代碼的容器將在運(yùn)行時(shí)提供該依賴項(xiàng)(例如,Java Servlet API)。
testCompile。用于編譯和運(yùn)行測(cè)試的依賴項(xiàng),但不是構(gòu)建或運(yùn)行項(xiàng)目的運(yùn)行時(shí)代碼所必需的。
最后,讓我們指定JAR工件的名稱。
jar { baseName = "gs-gradle" version = "0.1.0" }
jar塊指定如何命名JAR文件。在這種情況下,它將呈現(xiàn)gs-gradle-0.1.0.jar。
現(xiàn)在,如果您運(yùn)行gradle build,Gradle應(yīng)該從Maven Central存儲(chǔ)庫(kù)解析Joda Time依賴項(xiàng),并且構(gòu)建將成功。
使用Gradle Wrapper構(gòu)建項(xiàng)目
Gradle Wrapper是啟動(dòng)Gradle構(gòu)建的首選方式。它由Windows的批處理腳本和OS X和Linux的shell腳本組成。這些腳本允許您運(yùn)行Gradle構(gòu)建,而無需在系統(tǒng)上安裝Gradle。這曾經(jīng)是添加到您的構(gòu)建文件中的東西,但它已被折疊到Gradle中,因此不再需要。相反,您只需使用以下命令。
$ gradle wrapper --gradle-version 2.13
完成此任務(wù)后,您會(huì)注意到一些新文件。這兩個(gè)腳本位于文件夾的根目錄中,而包裝jar和屬性文件已添加到新gradle/wrapper文件夾中。
└──└── gradlew └── gradlew.bat └── gradle └── wrapper └── gradle-wrapper.jar └── gradle-wrapper.properties
Gradle Wrapper現(xiàn)在可用于構(gòu)建項(xiàng)目。將它添加到您的版本控制系統(tǒng),克隆項(xiàng)目的每個(gè)人都可以構(gòu)建它。它可以與安裝的Gradle版本完全相同的方式使用。運(yùn)行包裝器腳本來執(zhí)行構(gòu)建任務(wù),就像之前一樣:
./gradlew build
第一次運(yùn)行指定版本的Gradle的包裝器時(shí),它會(huì)下載并緩存該版本的Gradle二進(jìn)制文件。Gradle Wrapper文件旨在提交源代碼控制,以便任何人都可以構(gòu)建項(xiàng)目,而無需先安裝和配置特定版本的Gradle。
在此階段,您將構(gòu)建代碼。你可以在這里看到結(jié)果:
build ├── classes │ └── main │ └── hello │ ├── Greeter.class │ └── HelloWorld.class ├── dependency-cache ├── libs │ └── gs-gradle-0.1.0.jar └── tmp └── jar └── MANIFEST.MF
包括的是兩個(gè)預(yù)期類文件Greeter和HelloWorld,以及JAR文件。快速瀏覽一下:
$ jar tvf build/libs/gs-gradle-0.1.0.jar 0 Fri May 30 16:02:32 CDT 2014 META-INF/ 25 Fri May 30 16:02:32 CDT 2014 META-INF/MANIFEST.MF 0 Fri May 30 16:02:32 CDT 2014 hello/ 369 Fri May 30 16:02:32 CDT 2014 hello/Greeter.class 988 Fri May 30 16:02:32 CDT 2014 hello/HelloWorld.class
類文件被捆綁在一起。值得注意的是,即使您將joda-time聲明為依賴項(xiàng),此處也不包含該庫(kù)。并且JAR文件也不可運(yùn)行。
為了使這段代碼可以運(yùn)行,我們可以使用gradle的application插件。將其添加到您的build.gradle文件中。
apply plugin: "application" mainClassName = "hello.HelloWorld"
然后你可以運(yùn)行該應(yīng)用程序!
$ ./gradlew run :compileJava UP-TO-DATE :processResources UP-TO-DATE :classes UP-TO-DATE :run The current local time is: 16:16:20.544 Hello world! BUILD SUCCESSFUL Total time: 3.798 secs
捆綁依賴關(guān)系需要更多思考。例如,如果我們構(gòu)建一個(gè)WAR文件,一種通常與第三方依賴關(guān)系打包相關(guān)的格式,我們可以使用gradle的WAR插件。如果您使用的是Spring Boot并且想要一個(gè)可運(yùn)行的JAR文件,那么spring-boot-gradle-plugin非常方便。在這個(gè)階段,gradle對(duì)您的系統(tǒng)不了解,無法做出選擇。但就目前而言,這應(yīng)該足以開始使用gradle了。
要完成本指南的內(nèi)容,這里是完整的build.gradle文件:
apply plugin: "java" apply plugin: "eclipse" apply plugin: "application" mainClassName = "hello.HelloWorld" // tag::repositories[] repositories { mavenCentral() } // end::repositories[] // tag::jar[] jar { baseName = "gs-gradle" version = "0.1.0" } // end::jar[] // tag::dependencies[] sourceCompatibility = 1.8 targetCompatibility = 1.8 dependencies { compile "joda-time:joda-time:2.2" testCompile "junit:junit:4.12" } // end::dependencies[] // tag::wrapper[] // end::wrapper[]
此處嵌入了許多開始/結(jié)束注釋。這使得可以將構(gòu)建文件的位提取到本指南中,以獲得上述詳細(xì)說明。您在生產(chǎn)構(gòu)建文件中不需要它們。
概要
恭喜!您現(xiàn)在已經(jīng)創(chuàng)建了一個(gè)簡(jiǎn)單而有效的Gradle構(gòu)建文件,用于構(gòu)建Java項(xiàng)目。
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://m.hztianpu.com/yun/73181.html
摘要:時(shí)間年月日星期二說明本文部分內(nèi)容均來自慕課網(wǎng)。項(xiàng)目一個(gè)項(xiàng)目代表一個(gè)正在構(gòu)建的組件比如一個(gè)文件,當(dāng)構(gòu)建啟動(dòng)后,會(huì)基于實(shí)例化一個(gè)類,并且能夠通過變量使其隱式可用。任務(wù)動(dòng)作定義了一個(gè)最小的工作單元。 時(shí)間:2017年05月16日星期二說明:本文部分內(nèi)容均來自慕課網(wǎng)。@慕課網(wǎng):http://www.imooc.com教學(xué)示例源碼:無個(gè)人學(xué)習(xí)源碼:https://github.com/zccod...
摘要:記得在中支持多個(gè)子項(xiàng)目的構(gòu)建方法同樣的在中也會(huì)支持多項(xiàng)目的構(gòu)建方法還記得在中如何配置多項(xiàng)目工程嗎這里回憶一下首先我們需要一個(gè)父元素文件比如這樣而在中我們并不需要指定父元素的標(biāo)簽我們只需要編寫好對(duì)應(yīng)的文件夾名稱,并且將文件夾名稱和對(duì) 記得在maven中支持多個(gè)子項(xiàng)目的構(gòu)建方法,同樣的在gradle 中也會(huì)支持多項(xiàng)目的構(gòu)建方法 還記得在maven中如何配置多項(xiàng)目工程嗎, 這里回憶一下 首先...
閱讀 2563·2023-04-25 19:24
閱讀 1789·2021-11-11 16:54
閱讀 2894·2021-11-08 13:19
閱讀 3619·2021-10-25 09:45
閱讀 2629·2021-09-13 10:24
閱讀 3395·2021-09-07 10:15
閱讀 4202·2021-09-07 10:14
閱讀 3024·2019-08-30 15:56