Spring Boot 是在 Spring 的基础上创建一款开源框架,它提供了 spring-boot-starter-web(Web 启动器) 来为 Web 开发予以支持。spring-boot-starter-web 为我们提供了嵌入的 Servlet 容器以及 SpringMVC 的依赖,并为 Spring MVC 提供了大量自动配置,可以适用于大多数 Web 开发场景。
Gradle 是一个开源自动化构建工具,它的核心基于 Groovy 的丰富而可扩展的域描述语言(DSL),而不是基于可扩展的标记语言(XML)来定义构建脚本。
Gradle 是 Android 的官方构建工具,它提供了与多种开发工具和服务器的集成,包括 Eclipse,IntelliJ,Jenkins 和Android Studio。
在 “ Springboot基础知识(08)- spring-boot-starter-web(Web启动器)” 里创建了基于 Maven 的 Springboot Web 项目,本文基于 Gradle 创建一个 Springboot Web 项目。
1. 创建 Java 项目
1) 系统环境
Spring Boot 版本及其环境配置要求如下表。
Spring Boot 2.x
JDK 8.0 及以上版本
Gradle 7.x
IntelliJ IDEA 14.0 以上
本文将在 Windows 下使用 IntelliJ IDEA 和 Gradle 创建 Java 项目,在开始之前,确保已经正确搭建了 Spring 开发环境,参考 “ Spring基础知识(1)- Spring简介、Spring体系结构和开发环境配置 ”。
Windows 版本 : Windows 10 Home (20H2)
IntelliJ IDEA:Community Edition for Windows 2020.1.4
Gradle:7.0
Gradle 的安装配置,参考 “ Maven基础知识(12)- Gradle 简介、Gradle 安装配置、创建 Java 项目 ”。本文 Gradle 7.0 的安装路径是 C:\Applications\Java\gradle-7.0,grade 工作目录 C:/Applications/Java/gradle-rep,修改 IDEA 的 Gradle 配置如下:
IDEA 菜单 File -> Settings -> Build, Execution, Deployment -> Build Tools -> Gradle
Gradle User Home: C:/Applications/Java/gradle-rep
Use Gradel from: Specified location -> C:/Applications/Java/gradle-7.0
2) 运行 IDEA 创建项目
点击菜单 New 创建 Project:
New Project -> Project Type: Gradle -> Additional Libraries and Frameworks: Java -> Next
Name: SpringbootWebGradle
GroupId: com.example
ArtifactId: SpringbootWebGradle
-> Finish
3) 生成的项目目录结构和文件
(1) 目录结构
SpringbootWebGradle |- gradle | |- wrapper | |- gradle-wrapper.jar | |- gradle-wrapper.properties |- src | |- main | | |- java | | |- resources | | | |- test | |- java | |- resources | |- build.gradle |- settings.gradle |- gradlew |- gradlew.bat
目录及文件说明:
src/main/java:用于存放项目的 Java 文件;
src/main/resources: 用于存放项目的资源文件;
src/test/java:用于存放所有测试 Java 文件,如 JUnit 测试类;
gradle:Gradle wrapper 的 jar 文件和配置文件;
gradlew, gradlew.bat: Gradle wrapper 启动脚本;
build.gradle: 构建文件;
settings.gradle:Gradle 项目核心配置文件。
(2) build.gradle 文件
plugins { id 'java' } group 'com.example' version '1.0-SNAPSHOT' repositories { mavenCentral() } dependencies { testCompile group: 'junit', name: 'junit', version: '4.12' }
(3) settings.gradle 文件
rootProject.name = 'SpringbootWebGradle'
2. 配置 Springboot Web
1) 修改 build.gradle 文件
plugins { id 'java' id 'org.springframework.boot' version '2.6.6' id 'io.spring.dependency-management' version '1.0.11.RELEASE' } group 'com.example' version '1.0-SNAPSHOT' repositories { mavenLocal() mavenCentral() } dependencies { implementation 'org.springframework.boot:spring-boot-starter-web' implementation 'org.springframework.boot:spring-boot-starter-tomcat' testImplementation 'org.springframework.boot:spring-boot-starter-test' }
使用 spring-boot-starter-tomcat 将 tomcat 内嵌到 web 项目中,打包成 jar 后可以直接用 Java 命令行运行,不需要再部署到额外的 tomcat 服务器上。
也可以使用 Jetty 代替 Tomcat,两者不能同时内嵌,使用 Jetty 可用如下配置代码代替 Tomcat 的配置代码:
implementation 'org.springframework.boot:spring-boot-starter-jetty'
IDEA 菜单 View -> Tools Window -> Gradle -> 在 “SpringbootWebGradle” 点击鼠标右键 -> Reload Gradle Project
2) 创建 src/main/java/com/example/App.java 文件
package com.example; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; @SpringBootApplication public class App { public static void main(String[] args) { SpringApplication.run(App.class, args); System.out.println("Springboot web gradle"); } }
3) 创建 src/main/java/com/example/ServletInitializer.java 文件
package com.example; import org.springframework.boot.builder.SpringApplicationBuilder; import org.springframework.boot.web.servlet.support.SpringBootServletInitializer; public class ServletInitializer extends SpringBootServletInitializer { @Override protected SpringApplicationBuilder configure(SpringApplicationBuilder application) { return application.sources(App.class); } }
4) 创建 src/main/java/com/example/controller/IndexController.java 文件
package com.example.controller; import org.springframework.stereotype.Controller; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.ResponseBody; @Controller public class IndexController { @ResponseBody @RequestMapping("/hello") public String hello() { return "Hello page"; } }
注: src/main/java/com/example/controller 目录不存在,手动创建各级目录,下同。
5) 创建 src/main/resources/application.properties 文件
spring.main.banner-mode=off # Web server server.display-name=SpringbootWebGradle server.address=localhost server.port=9090
6) 运行
(1) Run App.main()
Open App.java, click mouse right button, select Run "App.main()"
(2) Edit Configurations
Click "+" add new configuration -> Select "Gradle"
Gradle Project: SpringbootWebGradle (click button to select a project)
Tasks: clean bootRun
Name: SpringbootWebGradle [clean bootRun]
-> Apply / OK
Click Run "SpringbootWebGradle [clean bootRun]"
...
Springboot web gradle
访问 http://localhost:9090/hello
Hello page
注:以上都是在 IDEA 英文版上的操作。jar 打包可以将 Tasks 改成 clean bootJar 或 clean jar。
3. 打包
1) jar 打包
(1) bootJar
菜单 View -> Tool Windows -> Gradle -> SpringbootWebGradle -> Tasks -> build -> bootJar(鼠标左键双击)
jar 包生成在目录 build/libs 里
SpringbootWebGradle-1.0-SNAPSHOT.jar
注:SpringbootWebGradle-1.0-SNAPSHOT.jar 包含依赖包,可以直接运行。
(2) jar
菜单 View -> Tool Windows -> Gradle -> SpringbootWebGradle -> Tasks -> build -> jar(鼠标左键双击)
jar 包生成在目录 build/libs 里
SpringbootWebGradle-1.0-SNAPSHOT-plain.jar
注:SpringbootWebGradle-1.0-SNAPSHOT-plain.jar 不包含依赖包,无法直接运行。
(3) 运行
点击 IDEA 底部 Terminal 标签页,执行如下命令。
$ java -jar build/libs/SpringbootWebGradle-1.0-SNAPSHOT.jar
...
Springboot web gradle
访问 http://localhost:9090/hello,页面显示:
Hello page
2) war 打包
(1) 修改 build.gradle
plugins { id 'java' id 'org.springframework.boot' version '2.6.6' id 'io.spring.dependency-management' version '1.0.11.RELEASE' id 'war' } war { archiveFileName = 'SpringbootWebGradle.war' //archiveName = 'SpringbootWebGradle.war' } ...
注:添加 war 插件,使用 archiveFileName 指定输出的包名,archiveName 已不推荐使用(废弃)。
IDEA 菜单 View -> Tools Window -> Gradle -> 在 “SpringbootWebGradle” 点击鼠标右键 -> Reload Gradle Project
(2) war
菜单 View -> Tool Windows -> Gradle -> SpringbootWebGradle -> Tasks -> build -> war(鼠标左键双击)
war 包生成在目录 build/libs 里
SpringbootWebGradle.war
(3) 运行
把 SpringbootWebGradle.war 复制到独立运行的 Tomcat 下 webapp 目录,默认设置的 Tomcat 运行在 8080 端口。
Tomcat 会自动解压 SpringbootWebGradle.war,在 webapp 下产生 SpringbootWebGradle 目录,访问 http://localhost:8080/SpringbootWebGradle/hello ,页面显示:
Hello page