关于 Gradle - 2 的说明
这是一篇关于使用 Gradle 构建 Java 应用程序的笔记。它将通过一个示例来构建一个多项目应用程序。
引言
这是一篇关于使用 Gradle 构建 Java 应用程序的笔记。它将通过一个示例来构建一个多项目应用程序。
背景
在我之前的笔记中,我讲到了如何使用Gradle构建一个单项目应用程序。我强烈建议您阅读我之前的笔记,这样您就能找到以下问题的答案。
- 如何在 Eclipse 中使用Buildship;
- 什么是Gradle wrapper,以及如何使用 wrapper 来执行 Gradle 命令;
- 什么是 "settings.gradle" 和 "build.gradle" 文件,以及如何使用 Gradle 构建一个单项目 Java 应用程序。
在这篇笔记中,我将通过一个示例来构建一个多项目应用程序。
该应用程序是从我之前构建的 Maven 应用程序转换而来的。它实现了与我之前笔记中的示例完全相同的功能。
- "sb-example-multi-gradle" 项目是父项目。它指定了所有子项目的通用构建选项,并通过 Gradle 对它们进行分组以实现多项目构建;
- "sb-example-implementation" 项目提供了 Spring Boot 应用程序的所有实现;
- "sb-example-i-jar-package" 项目将实现打包成一个可执行的 JAR 文件,我们可以从命令行运行它;
- "sb-example-i-war-package" 项目将实现打包成一个 WAR 文件,我们可以将其部署到像Tomcat这样的 Servlet 容器中。
如果您在 Eclipse 中安装了 BuildShip,您可以点击 "File" -> "Import..." -> "Gradle" -> "Existing Gradle Project",然后选择父项目将所有项目导入到 Eclipse 中。本示例的目的是通过 Gradle 的多项目功能拥有一个单一的实现但有两个包。由于这篇笔记是关于 Gradle 的,我不会花时间介绍 Spring Boot。您可以在我的 Maven 实现中找到关于项目的更多详细信息。
父项目
"sb-example-multi-gradle" 是父项目。除了 Gradle wrapper 文件外,它还指定了项目应该如何构建。
include 'sb-example-implementation' include 'sb-example-i-jar-package' include 'sb-example-i-war-package'
"settings.gradle" 告诉 Gradle 构建所有子项目。"build.gradle" 文件指定了所有项目的通用构建选项。
allprojects { group = 'com.song.example' version = '1.0' repositories { jcenter() } buildscript { repositories { jcenter() } } } subprojects { apply plugin: 'java' apply plugin: 'maven' // Run gradlew htmlDependencyReport for the reports apply plugin: 'project-report' sourceCompatibility = 1.8 targetCompatibility = 1.8 }
- 对于所有项目,我们希望从 "jcenter" 获取 Gradle 插件和 Java 依赖;
- 对于子项目,我们希望构建 Java 代码版本为 "1.8",并应用 "java" 和 "maven" 插件。
由于 "sb-example-multi-gradle" 项目是父项目,它没有标准的 "src" 文件夹。它唯一的目的是 agrupate 所有子项目并为它们提供通用配置。
"sb-example-implementation" 项目
"sb-example-implementation" 项目提供了所有实现。由于这篇笔记是关于 Gradle 而不是 Spring Boot,我不会花太多时间介绍实现。您可以在我之前的笔记中找到详细信息。"build.gradle" 告诉 Gradle 我们希望如何构建此项目。
dependencies { compile('org.springframework.boot:spring-boot-starter-web:1.5.9.RELEASE') }
由于我们将大部分规范放在父项目的 "build.gradle" 中,这里唯一需要做的是告诉 Gradle 该项目需要 "spring-boot-starter-web" 来编译。
"sb-example-i-jar-package" 项目
"sb-example-i-jar-package" 项目将 "sb-example-implementation" 打包成一个可执行的 JAR 文件。
buildscript { dependencies { classpath 'org.springframework.boot:spring-boot-gradle-plugin:1.5.9.RELEASE' } } apply plugin: 'org.springframework.boot' dependencies { compile project(':sb-example-implementation') } bootRepackage { mainClass = 'com.song.web.boot.ApplicationStart' }
"build.gradle" 文件指定了可执行 JAR 文件应该如何构建。
- 该项目依赖于 "sb-example-implementation",并且它是要打包的内容;
- 应使用 "org.springframework.boot" 插件来打包 JAR 文件;
- "ApplicationStart" 类是 Spring Boot JAR 的入口点。这个类在 "sb-example-implementation" 项目中实现。
"sb-example-i-war-package" 项目
"sb-example-i-war-package" 项目将 "sb-example-implementation" 打包成一个可执行的 WAR 文件。
apply plugin: 'war' dependencies { providedRuntime('org.springframework.boot:spring-boot-starter-tomcat:1.5.9.RELEASE') compile project(':sb-example-implementation') } war { archiveName = 'sb-example.war' }
"build.gradle" 文件指定了 WAR 文件应该如何构建。
- 该项目依赖于 "sb-example-implementation",并且它是要打包的内容;
- WAR 文件将部署到 Tomcat,因此 WAR 包中不需要 "spring-boot-starter-tomcat" 依赖;
- WAR 文件的名称是 "sb-example.war"。
构建和运行示例
您可以通过在父项目上执行以下命令来构建多项目应用程序。
gradlew clean build install
构建成功后,所有项目都应该成功构建。您可以在相应项目的 "build/libs" 目录中找到 JAR 和 WAR 文件。要在 Eclipse 中调试应用程序,您可以右键单击 "sb-example-implementation" 项目 -> "Debug As" -> "Java Application",然后选择 "ApplicationStart" 类来启动 Spring Boot 应用程序。
您可以执行以下命令来运行可执行 JAR 文件。
java -jar build/libs/sb-example-i-jar-package-1.0.jar
您也可以将生成的 WAR 文件部署到 Tomcat 服务器。无论您如何启动应用程序,如果启动成功,您都可以通过浏览器进行测试。
如果您将 WAR 部署到 Tomcat,Web 应用程序的端口号将不再是 "8090"。它将是您的 Tomcat 实例用于服务 HTTP 请求的端口号。
关注点
- 这是一篇关于使用 Gradle 构建 Java 应用程序的笔记。它通过一个示例介绍了如何构建一个多项目应用程序;
- 希望您喜欢我的博文,并希望这篇笔记能以某种方式帮助您。
历史
首次修订 - 2018/5/2