使用Gradle構建多模組專案


1- 介紹

本教學文章基於:

  • Eclipse Java EE IDE for Web Developers. Version: Mars.1 Release (4.5.1)

如果您是初學者Gradle的。那麼建議先看看初學者Gradle(Gradle Hello world)的文章:
/20/179/5184.html

2- 範例模型

這是本文章中的模型範例。如下圖所示 -

本文章教學的目的是:

  • 如何在Gradle中使用其他模組在一個模組中;
  • 使用Gradle打包多個模組(輸出為:jar,war);
  • 在Gradle Tomcat外掛上執行Web應用程式;

MathWebApp: 這是一個WebApp專案;
MathLibrary: 這是一個庫專案,包含MathWebApp使用的實用程式類。

GradleMain:將打包上面的兩個專案,它是一個主要模組。GradleMain 將:

  • MathLibary 打包裝到jar檔案中;
  • MathWebApp 打包裝到war檔案中;

3-建立專案數學庫

建立一個 Gradle 專案,在 Eclipse 選單中,File/New/Other… 找到 Gradle 如下圖所示 -

點選下一步(Next>)並輸入專案名稱: MathLibrary,如下圖所示 -

點選下一步(Next>)並選擇 Gradle 的安裝目錄,如下圖所示 -

點選下一步(Next>),等待 Eclipse 建立專案,最後點選完成(Finish)就好。如下圖所示 -

專案建立完成後,其結構如下圖中所示 -

接下來,我們建立一個 MathUtils類,如下所示:

MathUtils類的程式碼實現如下所示 -

package com.yiibai;

public class MathUtils {

      public static int sum(int a, int b) {
          return a + b;
      }

    }

4- 建立另一個專案:MathWebApp

同樣地,建立另外一個叫作 MathWebAppGradle專案,參考上面 MathLibrary 專案建立的步驟。

開啟 build.gradle 檔案,並新增一些依懶庫,如下圖中所示 -

apply plugin: 'java'
apply plugin: 'eclipse'
apply plugin: 'war'  

apply plugin: 'com.bmuschko.tomcat'

repositories {
   jcenter()
}

dependencies {    

   testCompile 'junit:junit:4.12'


   providedCompile "javax.servlet:javax.servlet-api:3.1.0"      

   compile project(':MathLibrary')
}


dependencies {
   def tomcatVersion = '7.0.59'

   tomcat "org.apache.tomcat.embed:tomcat-embed-core:${tomcatVersion}",
          "org.apache.tomcat.embed:tomcat-embed-logging-juli:${tomcatVersion}",
          "org.apache.tomcat.embed:tomcat-embed-jasper:${tomcatVersion}"
}


buildscript {

   repositories {
       jcenter()
   }

   dependencies {
       classpath 'com.bmuschko:gradle-tomcat-plugin:2.2.2'
   }
}

完成後,執行 Gradle Project Refresh-

建立index.jsp檔案,並在這個JSP檔案中使用在專案Math Library中建立的MathUtils類。

index.jsp 檔案的程式碼如下所示 -

<html>
<body>
<h2>Hello World!</h2>

<%

int a = 200;
int b = 300;

int c = com.yiibai.MathUtils.sum(a,b);

out.println("<h2>"+ c+"</h2>");

%>

</body>
</html>

5- 建立GradleMain專案

同樣地,我們再來建立一個Gradle專案:GradleMain 。完成其專案結構如下圖所示 -

開啟 GradleMain/settings.gradle 修改其內容如下 -

rootProject.name = 'GradleMain'


include   ':MathLibrary', ':MathWebApp'
project(':MathLibrary').projectDir = new File(settingsDir, '../MathLibrary')
project(':MathWebApp').projectDir = new File(settingsDir, '../MathWebApp')

並宣告GradleMain依賴於MathLibraryMathWebApp這兩個專案。編輯 GradleMain/build.gradle 程式碼內容如下-

apply plugin: 'java'
apply plugin: 'eclipse'

repositories {
    jcenter()
}

dependencies {   

    testCompile 'junit:junit:4.12'     
}

dependencies {
    compile project(':MathLibrary')
    compile project(':MathWebApp')
}

完成後,執行 Gradle Project Refresh-

6- 構建專案

切換到標籤「Gradle Task」,然後選擇「build/Run Gradle Tasks」。執行結果如下圖所示 -

Gradle將按專案的順序構建完成,結果如下:

Working Directory: D:/worksp/GradleMain
Gradle User Home: D:/worksp/gradle/Downloads
Gradle Distribution: Local installation at D:/worksp/tw511.com/gradle-3.1
Gradle Version: 3.1
Java Home: D:/Program Files/Java/jdk1.8.0_65
JVM Arguments: None
Program Arguments: None
Gradle Tasks: build

:MathLibrary:compileJava
:MathLibrary:processResources UP-TO-DATE
:MathLibrary:classes
:MathLibrary:jar
:MathWebApp:compileJava
:MathWebApp:processResources UP-TO-DATE
:MathWebApp:classes
:MathWebApp:jar
:compileJava
:processResources UP-TO-DATE
:classes
:jar
:assemble
:compileTestJava
:processTestResources UP-TO-DATE
:testClasses
:test
:check
:build
:MathLibrary:assemble
:MathLibrary:compileTestJava
:MathLibrary:processTestResources UP-TO-DATE
:MathLibrary:testClasses
:MathLibrary:test
:MathLibrary:check
:MathLibrary:build
:MathWebApp:war
:MathWebApp:assemble
:MathWebApp:compileTestJava
:MathWebApp:processTestResources UP-TO-DATE
:MathWebApp:testClasses
:MathWebApp:test
:MathWebApp:check
:MathWebApp:build

BUILD SUCCESSFUL

Total time: 3.619 secs

7- 執行MathWebApp

在 MathWebApp 專案上右鍵點選,在彈出的選單中選擇 「Run As「 -> 「Run Configurations ...「,在彈出的對話方塊中,在 「Gradle Project」 右鍵點選選擇 「New」,如下圖所示 -

然後寫入一些必要的引數,如下圖中紅圈的輸入部分 -

執行後,在終端上輸出結果如下-

Working Directory: D:/worksp/GradleMain
Gradle User Home: D:/worksp/gradle/Downloads
Gradle Distribution: Local installation at D:/worksp/tw511.com/gradle-3.1
Gradle Version: 3.1
Java Home: D:/Program Files/Java/jdk1.8.0_65
JVM Arguments: None
Program Arguments: None
Gradle Tasks: tomcatRun

:MathLibrary:compileJava UP-TO-DATE
:MathLibrary:processResources UP-TO-DATE
:MathLibrary:classes UP-TO-DATE
:MathLibrary:jar UP-TO-DATE
:MathWebApp:compileJava UP-TO-DATE
:MathWebApp:processResources UP-TO-DATE
:MathWebApp:classes UP-TO-DATE
:MathWebApp:tomcatRun
Started Tomcat Server
The Server is running at http://localhost:8080/MathWebApp

現在,我們開啟瀏覽器存取 - http://localhost:8080/MathWebApp/ 得到以下結果 -