使用Gradle構建Java項目(譯自springboot官網)

使用Gradle構建Java項目

這個指南將指導你如何使用Gradle構建一個簡單的Java項目

你將構建什麼

你將創建一個簡單應用,而且你是用Gradle創建它。

你需要什麼

  • 大約15分鐘
  • 一個你喜愛的文本編輯器或者IDE
  • JDK 6 或者更新

怎麼完整走完這個指南

就像很多Spring入門指南,你可以從零開始,一步一個腳印實現,或者你可以跳過你熟悉的步驟,不管怎麼樣,你最後會得到可以工作的代碼。

移步到<ins style="box-sizing: border-box;">設置項目</ins>,從頭開始

做以下步驟以跳過基本教程

  • <ins style="box-sizing: border-box;">下載</ins>並且解壓本指南的源代碼倉庫,或者使用Git克隆
git clone https://github.com/spring-guides/gs-gradle.git

  • cd進入
gs-gradle/initial

  • 跳到 Install Gradle

當你完成上面的步驟,你可以那你得到的結果與

gs-gradle/complete

裏的代碼對比。

設置項目

首先,爲Gradle設置一個java項目來構建。爲了把焦點放在Gradle,我們儘可能地把項目做得簡單。

創建目錄結構

在一個你選擇的項目目錄,創建以下子目錄機構;例如,再類unix系統運行

mkdir -p src/main/java/hello

在 src/main/java/hello 目錄裏,你可以創建任何你想要的Java類。爲了簡單的緣故和爲了與指南的一系列操作保持一致性,Spring推薦你創建兩個類:<mark style="box-sizing: border-box;">HelloWorld.java</mark> 和 <mark style="box-sizing: border-box;">Greeter.java.</mark>

<mark style="box-sizing: border-box;">src/main/java/hello/HelloWorld.java</mark>

package hello;

public class HelloWorld {
  public static void main(String[] args) {
    Greeter greeter = new Greeter();
    System.out.println(greeter.sayHello());
  }
}

<mark style="box-sizing: border-box;">src/main/java/hello/Greeter.java</mark>

package hello;

public class Greeter {
  public String sayHello() {
    return "Hello world!";
  }
}

安裝Gradle

既然現在你有了一個你能使用Gradle構建的項目,那麼你可以安裝Gradle 使用安裝器是非常推薦的:

  • SDKMAN
  • Homebrew

如果以上工具都不適用於你的情況,你可以從 https://www.gradle.org/downloads 下載二進制文件,這是最後的手段。只有這個二進制文件是必要的,所以請查找指向gradle-version-bin.zip的鏈接。(你也可以選擇gradle-version-all.zip以獲取源代碼和文檔以及二進制文件。)

解壓縮下載的文件到你的電腦,並且把bin文件夾到你的路徑。

運行Gradle,測試Gradle的安裝是否成功。使用以下命令。

gradle

如果一切順利,你會看到一個歡迎信息:

:help

Welcome to Gradle 2.3.

To run a build, run gradle <task> ...

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

那麼你現在就已經安裝好Gradle了。

看看Gradle能做什麼

既然現在Gradle已經安裝好了,那就看看它能做什麼。在你創建一個項目的build.gradle文件時,你可以查看它有哪些任務是可用的。

gradle tasks

你應該看到一個可用任務列表。假設你運行Gradle在一個沒有build.gradle文件的文件夾,你會看見一些非常基礎的任務,例如:

: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

即使這些任務可以使用,沒有一個項目構建配置,他們沒有多大的價值。當你提供了build.gradle文件,一些任務變得更有用。當你向build.gradle加入插件,任務列表會變長,所以你會有時會想再次運行 task 來看那些任務可用。

說到加入插件,下一步是加入一個啓用基本java構建功能的插件。

構建java代碼

從簡單開始,創建一個最基礎的build.gradel文件到項目文件夾,這個文件夾是你在指南開頭創建的。在文件中只需寫入一行代碼:

apply plugin: 'java'

在構建配置中的這一行代碼帶來了非常有用的作用。再次運行 gradle tasks,會看到新的任務加入了這個列表,包括構建項目,創建JavaDoc,運行測試的任務。

你將經常使用 gradle build 任務。這個任務編譯,測試,組裝代碼到一個JAR文件。你可以運行以下命令來使用:

gradle build

等待幾秒,“BUILD SUCCESSFUL”說明構建已經完成。 請檢查 build 文件夾,查看構建工作的結果。在其中你會找到一系列的文件夾,包括以下三個值得注意的文件夾。

  • classes。此項目的已編譯的.class文件。
  • reports。該文件夾由build生成(比如test reports)
  • libs。整合的項目的庫(通常是JAR或者WAR文件)。

classes 文件夾包含 從Java代碼編譯出來的.class文件。特別地,你應該在裏面找HelloWorld.class和Greeter.class.

在此刻,這個項目沒有任何庫依賴,所以在dependency_cache文件夾中沒有任何文件。

reports 文件夾應包含一個項目的運行時單元測試報告。因爲這個項目還沒有單元測試,所以這個報告不會有趣。

libs 文件夾應包含一個以項目文件夾名字命名的JAR文件。再向下,你將看見你如何指定JAR文件名和它的版本的方法

聲明依賴

這個簡單的Hello World例子是完全地獨立和不依賴任何額外的庫。然而,很多應用依賴於外部的庫來處理通常的或者複雜的功能。

舉個例子,假設除了說“Hello,World”之外,你想要這個應用打印當前日期和時間,你應當使用原生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類來獲得和打印當前時間

如果你現在運行gradle build 來構建項目,那麼它會失敗,因爲你還沒有聲明Jada Time 作爲這次構建的編譯依賴

對於初學者,需要爲第三方庫加入源。

repositories {
    mavenCentral()
}

repositories代碼塊指示了這次構建應該從Maven Central 庫中解決它的依賴關係。Gradle嚴重依賴由Maven 構建工具創建的規範和功能,包括使用Maven Central的可選項當作庫依賴的源。

既然我們已經加入了第三方庫,那麼讓我們聲明他們。

sourceCompatibility = 1.8
targetCompatibility = 1.8

dependencies {
    compile "joda-time:joda-time:2.2"
    testCompile "junit:junit:4.12"
}

根據dependencies代碼塊,你聲明一個Joda Time的單一的依賴。特別地,你請求的是joda-time組中的joda-time庫的2.2版本。

關於這個依賴有一點值得注意,就是它是一個compile依賴,說明了在compole-time過程中它可能是可用的(如果你正在構建一個WAR文件,包括這個WAR的/WEB-INF/libs文件夾)另外值得注意的依賴類型包括:

  • providedCompile。編譯代碼所必要的依賴,但是它由一個運行這代碼的容器在運行時提供的(例如,Java Servlet API)
  • testCompole。被用來編譯和運行測試的依賴,但是對於構建或運行項目的運行時代碼是非必須的。

最後,讓我們指定我們JAR成品的名字。

jar {
    baseName = 'gs-gradle'
    version =  '0.1.0'
}

jar代碼塊決定這個JAR將怎樣被命名,在這裏,它的名字是gs-gradle-0.1.0.jar。

現在如果你運行gradle build,Gradle應該會從Maven Central倉庫中解決Joda Time的依賴並且構建將會成功。

使用Gradle Wrapper 構建你的項目

Gradle Wrapper是開始一個Gradle build的首選方法。它由windows批處理腳本和OSX、Linux的shell腳本組成。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章