gradle java ide_使用Gradle構建Java項目

使用Gradle構建Java項目

這個手冊將通過一個簡單的Java項目向大家介紹如何使用Gradle構建Java項目。

我們將要做什么?

我們將在這篇文檔航中創建一個簡單的Java項目,然后使用Gradle構建它。

需要準備什么?

預留15分鐘空閑時間

一件稱手的兵器(你最喜歡的IDE或者文本編輯器)

Java環境([JDK6](http://www.oracle.com/technetwork/java/javase/downloads/index.html”JDK”及以上版本)

如何完成這個手冊的內容?

與大多數Spring的入門手冊一樣,你可以從頭開始一步步完成教程中的每一步工作,也可以跳過你已經爛熟的基礎步驟。不管采用那種方式,你最后都會得到可工作的代碼。

如果要重頭開始,猛戳這里

如果要跳過基礎部分,需執行以下操作:

下載并解壓本文檔相關源代碼,或者使用Git克隆一個:git clone https://github.com/spring-guides/gs-gradle.git

cd 進入?gs-gradle/initial

當你完成后,你可以使用gs-gradle/complete來檢查你的結果。

配置項目

首先需要配置一個項目給Gradle進行構建。為了保證我們能專注于Gradle,目前最好創建最簡單的Java項目。

創建目錄結構

在項目主目錄下,創建以下子目錄;在*nix系統下可以使用命令:mkdir -p src/main/java/hello

在src/main/java/hello目錄中,你可以創建任何Java類。為簡單起見并且為了與指南的其余部分保持一致,我們建議創建兩個雷HelloWorld.java和Greeter.java

src/main/java/hello/HelloWorld.java的源代碼:

src/main/java/hello/Greeter.java的源代碼:

安裝Gradle

到目前為止,我們已經搭建了一個可以用來使用Gradle構建的項目,現在到了安裝Gradle的時候了。

Gradle可以從http://www.gradle.org/downloads下載。我們僅需要下載Gradle的二進制發布包,所以在剛才提供的連接上尋找gradle-version-bin.zip文件(當然,也可以下載gradle-version-all.zip,它包含源代碼、文檔以已編譯代碼)

解壓縮下載的文件,并將解壓后目錄中的bin目錄加到環境變量中。

可以在命令行中執行以下代碼來測試Gradle是否安裝成功

如果你很幸運,嘛事都OK,你會看到下面的welcome信息:

看到這個了,說明Gradle已經成功安裝到系統中了。如果沒看到……再去看看Gradle的手冊先。

Gradle可以做些什么呢?

Gradle已經安裝到系統上了,那么它可以做什么呢?在我們為項目創建build.gradle文件之前,我們可以先問一下Gradle目前有哪些可用的任務(Tasks):

我們可以看到可用任務(Tasks)的列表。假設你執行Gradle的目錄不存在build.gradle文件,你可以看到一些非常基礎的任務,類似于:

盡管上面的列出的任務是可用的,但是如果沒有項目的構建配置他們無法提供太多的價值。當配置了項目的build.gradle后,一些任務將變得非常有用。

如果在build.gradle中配置了插件(plugins)上面的任務列表會變得更長,最好在配置插件后使用gradle task看看那些任務是可用的。

剛說到配置插件,馬上我們就會配置一個插件來啟用基礎的Java構建功能。

構建Java代碼

先從簡單的開始,創建一個最簡單的只有一行的build.gradle文件:

別看只有一行配置,提供的能力可不是一點點哦。再執行一下gradle task,我們可以看到任務列表中增加了一些內容,比如:用來編譯java項目的任務、用來創建JavaDoc的任務、用來執行單元測試的任務。

我們經常使用的任務是gradle build,這個任務執行以下操作:編譯、執行單元測試、組裝Jar文件:

幾秒鐘以后,會看到”BUILD SUCCESSFUL”輸出,說明構建已經完成了。

可以到”build”目錄中查看構建結構,在這個目錄中我們可以看到很多子目錄,其中有三個我們需要特別注意:

classes: 保存被編譯后的.class文件

reports: 構建報告(如:測試報告)

lib: 組裝好的項目包(通常為:.jar或者.war文件)

classes目錄包含編譯生成的所有.class文件。執行完編譯后,我們應該可以在這里找到”HelloWorld.class”和”Greeter.class”。

到目前為止,我們項目并沒有申明任何依賴,所以”debendency_cache”目錄是空的。

“reports”目錄會包含項目單元測試的測試報告,當然,當前項目并未編寫任何單元測試,所以,也是空目錄。

“lib”目錄包含打包后的jar或war文件,在后面的內容中我們將學會如何定義JAR的名稱和版本號。

申明依賴

我們的Hello World例程非常簡單且不依賴于任何第三方庫,但是大多數應用程序都會依賴第三方庫提供的通用或復雜的功能。

例如:假設我們希望更好的說”Hello World!”,我們希望應用程序能同時輸出當前的日期和時間。當然這可以使用Java自身的日期和時間相關庫,但是我們可以使用”Joda Time”庫實現更有趣的功能。

首先,把HelloWorld.jara類修改成下面這樣:

這里我們的HelloWorld使用”Joda Time”的LocalTime類來獲取和輸出當前時間。

如果我們馬上執行gradle build來構建項目,構建過程將會失敗,因為我們并未將”Joda Time”庫聲明為編譯時依賴庫。

首先,我們需要添加一些配置來定義第三方庫的來源:

上面的repositories定義,告訴構建系統通過Maven中央庫來檢索項目依賴的軟件包,Gradle在很大程度上依賴Maven構建工具的許多約定和基礎功能,包括使用Maven中央的庫來處理依賴關系。

現在我們可以使用第三方庫了,但現需要定義:

使用dependencies塊,我們定義了一條Joda Time的依賴項。這里,明確指定使用joda-time組內的版本為2.2的joda-time庫。

另一個要注意的是,我們在這個依賴定義中指定依賴是compile范圍的。意思是,這個庫在編譯和運行時都需要(如果我們正在構建WAR文件,這個文件會在/WEB-INF/libs目錄下)。另外值得注意的依賴類型包括:

providedCompile:在編譯期間需要這個依賴包,但在運行期間可能由容器提供相關組件(比如:Java Servlet API)

testCompile:依賴項僅在構建和運行測試代碼時需要,在項目運行時不需要這個依賴項。

最后,我們來定義我們將生成的Jar文件的名字:

jar塊定義如何命名JAR文件,在上面的例子中,我們的JAR文件的名字為:gs-gradle-0.1.0.jar。

注:這個時候如果執行gradle build,Gradle會花一些時間從Maven中央庫下載Joda Time包(具體下載時間依賴于你的網速)

使用Gradle Wrapper來構建項目

Gradle Wrapper是開始一個Gradle構建的首選方式。它包含了windows批處理以及OS X和Linux的Shell腳本。這些腳本允許我們在沒有安裝Gradle的系統上執行Gradle構建。要實現這個功能,我們需要在我們的build.gradle文件中增加以下代碼:

執行下面代碼來下載和初始化wrapper腳本:

命令執行完后,我們可以看到增加了一些新文件。有兩個文件在根目錄下,wapper的jar文件和properties文件在新增的gradle/wrapper目錄下。

現在Gradle Wrapper已經可以用來構建系統了。把這些文件增加到版本控制系統中,然后再任何時候、任何地方只要遷出這些文件就一個按照同樣的方式(與當前生成 Wrapper的Gradle版本一致)構建系統。運行wrapper腳本來構建系統,跟我們之前橋的命令很像:

當第一次通過wrapper使用指定版本的Gradle構建系統時,wrapper首先下載對應版本的Gradle可執行文件。Gradle Wrapper的所有文件在都可以被提交到版本庫中,所以,任何人都可以在沒有安裝Gradle的環境下使用相同版本的Gradle構建系統。

在這個時候,我們需要重新構建我們的代碼,構建的結果目錄如下:

Jar文件中包含我們希望打包的Gretter和HelloWorld類。

需要注意的,即使我們聲明了joda-time依賴,但這里也沒有包括對應的庫文件,而且生成的JAR文件也不是可運行JAR文件。

要想讓代碼可以運行,我們可以使用Gradle的application插件。增加以下內容到build.gradle文件中。

現在我們的app可以執行了。

為了能夠將依賴包也以一起打包,比如,我們希望構建一個WAR包,可以包含第三方組件的打包格式,我們可以使用Gradle的WAR插件。如果我們使用Spring Boot并且希望得到一個可執行的JAR文件,我們可以使用spring-boot-gradle-plugin插件。在我們的示例中,gradle沒有足夠的信息來了解我們的目標系統。但是,目前介紹的內容已經足夠我們開始使用Gradle了。

下面是本文需要用的的build.gradle文件:

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/539623.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/539623.shtml
英文地址,請注明出處:http://en.pswp.cn/news/539623.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

小馬激活軟件下載,當心偽小馬,有病毒

官方的小馬激活軟件已經停止更新了,下文是官方停更公告。 http://www.pccppc.com/xiaomajihuo-html 所以小馬oem7以后的都不是官方的,包含病毒。重裝系統后,一般是先激活系統,再安裝殺毒軟件,這就給“偽小馬激活工具”…

truncate,delete,drop之間的區別

TRUNCATE TABLE 在功能上與不帶 WHERE 子句的 DELETE 語句相同:二者均刪除表中的全部行。 但 TRUNCATE TABLE 比 DELETE 速度快,且使用的系統和事務日志資源少。 DELETE 語句每次刪除一行,并在事務日志中為所刪除的每行記錄一項。 TRUNCATE…

三張圖搞懂JavaScript的原型對象與原型鏈

對于新人來說,JavaScript的原型是一個很讓人頭疼的事情,一來prototype容易與__proto__混淆,二來它們之間的各種指向實在有些復雜,其實市面上已經有非常多的文章在嘗試說清楚,有一張所謂很經典的圖,上面畫了…

python partial_如何在python多處理模塊中使用partial函數?

下面是我如何解決這個問題的一個簡單例子from functools import partialfrom multiprocessing import Pooldef VariadicLifter(func, args):return func(*args)def func(x,y,z,a):return x2*y3*z4*aif __name__ __main__:func_ partial( func, 500, 1007)lfunc_ partial( Va…

Mybatis中resultMap

MyBatis中在查詢進行select映射的時候,返回類型可以用resultType,也可以用resultMap,resultType是直接 表示返回類型的,而resultMap則是對外部ResultMap的引用,但是resultType跟resultMap不能同時存在。 1.resultType …

超簡單的mysql多實例布置

一、基本概念mysql下載:http://mirrors.sohu.com/mysql/MySQL-5.5/1、MySQL多實例就是在一臺機器上面開啟多個不同的端口,運行多個MySQL服務進程。這些MySQL多實例公用一套安裝程序,使用不同的(也可以是相同的)配置文件,啟動程序&…

java程序設計計算器_Java程序設計計算器(含代碼)

Java程序課程設計任務書實用性計算器的設計與開發1、主要內容:開發一個實用型的計算器程序,實現基本的計算功能同時并進行相應的功能拓展,使其具更加人性化的功能。我們可以用其進行相應的計算功能來方便我們的學習,代替我們進行一…

mybatis配置insert/update/delete同一個模板

insert,update,delete標簽只是一個模板,在操作時是以sql語句為核心的, 即在做增/刪/改時,insert/update/delete便簽可以通用, 但做查詢時只能用 select 標簽 提倡什么操作就用什么標簽 這就是為什么 ex…

Mybatis配置文件resultMap映射啥時候可寫可不寫?

1、student實體類 public class Student {private Integer id;//編號private String name;//姓名private Double sal;//薪水public Student(){}public Student(Integer id, String name, Double sal) {this.id id;this.name name;this.sal sal;}public Integer getId() {ret…

arithmetic java_Java:Arithmetic

好吧,事實上你有方法設置變量叫get - 這顯然不是一個好主意,并且沒有縮進......但它應該有效。但是,你還沒有展示出你是如何使用它的。也許你實際上并沒有被稱為setter方法?以下是相同代碼但具有不同名稱的示例,以及使…

網絡框架 Retrofit(三)

簡單實現Retrofit(替代Okhttp) 1.定義注解參數 Documented Target(PARAMETER) Retention(RUNTIME) public interface Field {String value(); } 復制代碼Documented Target(METHOD) Retention(RUNTIME) public interface Get {String value() default &q…

Tomcat提示“XDB 的服務器 localhost 要求用戶名和密碼”

在地址欄輸入http://localhost:8080/(8080是TOMCAT的端口號)測試,系統提示“XDB 的服務器 localhost 要求用戶名和密碼”,并彈出輸入用戶、密碼的窗口,查看代碼沒問題,不解,上網上查資料,是因為…

java jqgrid json格式_jqGrid 數據之 Json

Json數據需要定義jsonReader來跟服務器端返回的數據做對應,其默認值: jsonReader : { root: "rows", page: "page", total: "total", records: "records", repeatitems: true, c…

django 中靜態文件項目加載問題

問題描述: django項目中創建了多個app后,每個app中都有對應的static靜態文件。整個項目運行時這些靜態文件的加載就是一個問題,因為整個項目我只參與了一部分,項目部署之類的并沒有參與。我寫的部分的js代碼遇到點問題&#xff0c…

Erlang/OTP設計原則(文檔翻譯)

http://erlang.org/doc/design_principles/des_princ.html 圖和代碼皆源自以上鏈接中Erlang官方文檔,翻譯時的版本為20.1。 這個設計原則,其實是說用戶在設計系統的時候應遵循的標準和規范。閱讀前我一直以為寫的是作者在設計 Erlang/OTP 框架時的一些原…

存儲過程的參數可以使用sql的函數

系統已做成存儲過程,調用方法如下: crh_entry(yyyymmdd,起始時間,結束時間); 示例1:進行2016年4月10日10時到12時的測試,應寫為: exec crh_entry(20160410,10,11); 示例2:進行2016年4月8日14時到15時的…

java如何實例化集合_如何在java中實例化一個Queue對象?

Queue是一個接口,這意味著你不能直接構造一個Queue 。最好的select是構造一個已經實現Queue接口的類,如下所示: AbstractQueue , ArrayBlockingQueue , ConcurrentLinkedQueue , DelayQueue , D…

leetcode 121 股票買賣問題系列

描述: 給一些列數字,表示每條股票的價格,如果可以買賣一次(不能同一天買和賣),求最大利益(即差最大)。 其他三道問題是,如果能買賣無限次,買賣兩次&#xff0…

Mybatis-jar-lib

csdn的下載好像和我有仇,上傳資源不斷提示:請您先登錄 下載:http://pan.baidu.com/s/1pL2BAzT asm-3.3.1.jar cglib-2.2.2.jar commons-logging-1.1.1.jar mybatis-3.1.1.jar ----以上mybatis的--- log4j-1.2.16.jar ----以上log4j日志--…

java使用隊列實現棧思路_算法面試:隊列實現棧的方案

聲明:碼字不易,轉載請注明出處,歡迎文章下方討論交流。前言:Java數據結構與算法專題會不定時更新,歡迎各位讀者監督。本篇介紹的是如何用兩個隊列實現棧的問題。這道題作為上一篇文章算法面試:棧實現隊列的…