使用Gradle构建多模块项目

使用Gradle构建多模块项目

1- 介绍

本教程文章基于:

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

如果您是初学者Gradle的。那么建议先看看初学者Gradle(Gradle Hello world)的文章:
http://www.zyiz.net/gradle/gradle-tutorial-for-beginners.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.zyiz;

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.zyiz.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/zyiz.net/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/zyiz.net/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/ 得到以下结果 -