在之前的笔记中,介绍了如何使用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"项目将实现打包成一个可以部署到如Tomcat这样的Servlet容器的WAR文件。
如果在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"文件夹。它唯一的目的是将所有子项目分组,并为它们提供通用配置。
"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-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-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,所以"spring-boot-starter-tomcat"依赖不需要在WAR包中;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应用的笔记。它提供了一个构建多项目应用的示例;