摘要:要從頭開始,請繼續(xù)使用構(gòu)建。文件夾應(yīng)包含項(xiàng)目運(yùn)行單元測試的報告。由于該項(xiàng)目尚未進(jìn)行任何單元測試,因此該報告無效。使用構(gòu)建項(xiàng)目是啟動構(gòu)建的首選方式。現(xiàn)在可用于構(gòu)建項(xiàng)目。概要恭喜您現(xiàn)在已經(jīng)創(chuàng)建了一個簡單而有效的構(gòu)建文件,用于構(gòu)建項(xiàng)目。
本指南將引導(dǎo)您使用Gradle構(gòu)建一個簡單的Java項(xiàng)目。
你要構(gòu)建什么
您將創(chuàng)建一個簡單的應(yīng)用程序,然后使用Gradle構(gòu)建它。
你需要什么
大約15分鐘
最喜歡的文本編輯器或IDE
JDK 6或更高版本
如何完成本指南
與大多數(shù)Spring入門指南一樣,您可以從頭開始并完成每個步驟,或者您可以繞過您已熟悉的基本設(shè)置步驟。無論哪種方式,您最終都會使用工作代碼。
要從頭開始,請繼續(xù)使用Gradle構(gòu)建。
要跳過基礎(chǔ)知識,請執(zhí)行以下操作:
下載并解壓縮本指南的源存儲庫,或使用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建立一個Java項(xiàng)目。為了保持對Gradle的關(guān)注,讓項(xiàng)目盡可能簡單。
創(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類。為了簡單起見并與本指南的其余部分保持一致,Spring建議您創(chuàng)建兩個類: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)在您有了一個可以使用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ī),然后將bin文件夾添加到您的路徑中。
要測試Gradle安裝,請從命令行運(yùn)行Gradle:
gradle
如果一切順利,您會看到一條歡迎信息:
: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)建配置,它們也不會提供太多價值。當(dāng)你充實(shí)build.gradle文件時,一些任務(wù)會更有用。在添加build.gradle插件時,任務(wù)列表會增加,因此您偶爾會想要再次運(yùn)行任務(wù)以查看可用的任務(wù)。
說到添加插件,接下來添加一個啟用基本Java構(gòu)建功能的插件。
構(gòu)建Java代碼
從簡單的build.gradle開始,在本指南開頭創(chuàng)建的中創(chuàng)建一個非?;镜奈募?。只給它一行
apply plugin: "java"
構(gòu)建配置中的這一行帶來了大量功率。再次運(yùn)行gradle tasks,您會看到添加到列表中的新任務(wù),包括構(gòu)建項(xiàng)目,創(chuàng)建JavaDoc和運(yùn)行測試的任務(wù)。
您將經(jīng)常使用gradle build。此任務(wù)將代碼編譯,測試并組裝到JAR文件中。你可以像這樣運(yùn)行它:
gradle build
幾秒鐘后,“BUILD SUCCESSFUL”表示構(gòu)建已完成。
要查看構(gòu)建工作的結(jié)果,請查看構(gòu)建文件夾。在那里你會找到幾個目錄,包括這三個值得注意的文件夾:
classes:該項(xiàng)目已編譯的.class文件。
reports:構(gòu)建生成的報告(例如測試報告)。
libs:匯編的項(xiàng)目庫(通常是JAR和/或WAR文件)。
classes文件夾具有通過編譯Java代碼生成的.class文件。具體來說,您應(yīng)該找到HelloWorld.class和Greeter.class。
此時,項(xiàng)目沒有任何庫依賴項(xiàng),因此dependency_cache文件夾中沒有任何內(nèi)容。
reports文件夾應(yīng)包含項(xiàng)目運(yùn)行單元測試的報告。由于該項(xiàng)目尚未進(jìn)行任何單元測試,因此該報告無效。
libs文件夾應(yīng)包含以項(xiàng)目文件夾命名的JAR文件。再往下,您將看到如何指定JAR的名稱及其版本。
聲明依賴項(xiàng)
簡單的Hello World示例是完全獨(dú)立的,不依賴于任何其他庫。但是,大多數(shù)應(yīng)用程序依賴于外部庫來處理常見或復(fù)雜的功能。
例如,假設(shè)除了說“Hello World!”之外,您還希望應(yīng)用程序打印當(dāng)前日期和時間。您可以使用本機(jī)Java庫中的日期和時間工具,但是通過使用Joda Time庫可以使事情變得更有趣。
首先,將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)前時間。
如果您現(xiàn)在運(yùn)行gradle build來構(gòu)建項(xiàng)目,那么構(gòu)建將失敗,因?yàn)槟鷽]有在構(gòu)建中將Joda Time聲明為編譯依賴項(xiàng)。
對于初學(xué)者,您需要為第三方庫添加源。
repositories { mavenCentral() }
repositories塊指示構(gòu)建應(yīng)從Maven Central存儲庫解析其依賴關(guān)系。Gradle嚴(yán)重依賴Maven構(gòu)建工具建立的許多約定和工具,包括使用Maven Central作為庫依賴關(guān)系源的選項(xiàng)。
現(xiàn)在我們已經(jīng)為第三方庫做好了準(zhǔn)備,讓我們宣布一些。
sourceCompatibility = 1.8 targetCompatibility = 1.8 dependencies { compile "joda-time:joda-time:2.2" testCompile "junit:junit:4.12" }
使用dependencies塊,您可以為Joda Time聲明一個依賴項(xiàng)。具體來說,你在joda-time組中要求(從右到左閱讀)joda-time庫2.2版。
關(guān)于這種依賴關(guān)系的另一個注意事項(xiàng)是它是一個compile依賴項(xiàng),表明它應(yīng)該在編譯時可用(如果你正在構(gòu)建一個WAR文件,包含在WAR的/WEB-INF/libs文件夾中)。其他值得注意的依賴類型包括:
providedCompile。編譯項(xiàng)目代碼所需的依賴項(xiàng),但是運(yùn)行代碼的容器將在運(yùn)行時提供該依賴項(xiàng)(例如,Java Servlet API)。
testCompile。用于編譯和運(yùn)行測試的依賴項(xiàng),但不是構(gòu)建或運(yùn)行項(xiàng)目的運(yùn)行時代碼所必需的。
最后,讓我們指定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存儲庫解析Joda Time依賴項(xiàng),并且構(gòu)建將成功。
使用Gradle Wrapper構(gòu)建項(xiàng)目
Gradle Wrapper是啟動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ù)后,您會注意到一些新文件。這兩個腳本位于文件夾的根目錄中,而包裝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òu)建它。它可以與安裝的Gradle版本完全相同的方式使用。運(yùn)行包裝器腳本來執(zhí)行構(gòu)建任務(wù),就像之前一樣:
./gradlew build
第一次運(yùn)行指定版本的Gradle的包裝器時,它會下載并緩存該版本的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
包括的是兩個預(yù)期類文件Greeter和HelloWorld,以及JAR文件??焖贋g覽一下:
$ 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),此處也不包含該庫。并且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)建一個WAR文件,一種通常與第三方依賴關(guān)系打包相關(guān)的格式,我們可以使用gradle的WAR插件。如果您使用的是Spring Boot并且想要一個可運(yùn)行的JAR文件,那么spring-boot-gradle-plugin非常方便。在這個階段,gradle對您的系統(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)建了一個簡單而有效的Gradle構(gòu)建文件,用于構(gòu)建Java項(xiàng)目。
文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請注明本文地址:http://www.ezyhdfw.cn/yun/73181.html
摘要:時間年月日星期二說明本文部分內(nèi)容均來自慕課網(wǎng)。項(xiàng)目一個項(xiàng)目代表一個正在構(gòu)建的組件比如一個文件,當(dāng)構(gòu)建啟動后,會基于實(shí)例化一個類,并且能夠通過變量使其隱式可用。任務(wù)動作定義了一個最小的工作單元。 時間:2017年05月16日星期二說明:本文部分內(nèi)容均來自慕課網(wǎng)。@慕課網(wǎng):http://www.imooc.com教學(xué)示例源碼:無個人學(xué)習(xí)源碼:https://github.com/zccod...
摘要:記得在中支持多個子項(xiàng)目的構(gòu)建方法同樣的在中也會支持多項(xiàng)目的構(gòu)建方法還記得在中如何配置多項(xiàng)目工程嗎這里回憶一下首先我們需要一個父元素文件比如這樣而在中我們并不需要指定父元素的標(biāo)簽我們只需要編寫好對應(yīng)的文件夾名稱,并且將文件夾名稱和對 記得在maven中支持多個子項(xiàng)目的構(gòu)建方法,同樣的在gradle 中也會支持多項(xiàng)目的構(gòu)建方法 還記得在maven中如何配置多項(xiàng)目工程嗎, 這里回憶一下 首先...
閱讀 2560·2023-04-25 19:24
閱讀 1787·2021-11-11 16:54
閱讀 2892·2021-11-08 13:19
閱讀 3617·2021-10-25 09:45
閱讀 2629·2021-09-13 10:24
閱讀 3391·2021-09-07 10:15
閱讀 4193·2021-09-07 10:14
閱讀 3023·2019-08-30 15:56