为什么我要使用Gradle
创建父级工程
由于一个工程可能包含多个模块,因此我们需要有个父级工程来包含它们,以方便以后的管理
即便我们的代码只有一个模块,从规范的角度来说,也应当有个父级工程,以方便日后的扩展
我们新建一个名为【project-hello】的文件夹,作为父级工程的存放位置
由于父级工程只是一个容器,所以我们不需要代码目录,可以从项目结构中删除,当然也可以留下来用于存放测试代码
在【Project Structure】界面中,将【src目录】标记为【Excluded】,确定后手动删除该文件夹即可
创建子模块
在工程目录上右键,【New】-【Module】,选择【Gradle】和【Java】,和创建工程时操作一样,即可创建多个子模块
引入外部模块
如果我们不想新建模块,而是希望使用已有的代码作为模块,那么有两种方法
一种是将该模块的代码直接拷到当前工程下,在【settings.gradle】中添加【include ‘xxx’】即可
另一种方法是单独写一行脚本,来指定该模块的位置,但是Gradle只支持通过相对路径来指定位置
如果不是多个工程共享同一份代码的话,建议使用第一种方式,比较放在一起更加容易维护、备份、打包
模块间依赖
在模块的【build.gradle】中添加以下脚本,即可引用其它模块,外部模块也是一样的,因此模块名都已经在工程中定义了,不管是同工程的还是外部的,都可以直接使用
dependencies {
implementation project(":lib-commons")
implementation project(":lib-external")
}
添加SpringBoot依赖
直到现在,我们尚未提及任何关于Spring的事情
其实Spring项目和Java项目并无区别,只是多了相应的依赖库和Spring编译插件而已
我们只需在【build.gradle】增加相关配置,就可以把一个普通的Java项目升级为SpringBoot后台项目
plugins {
id 'org.springframework.boot' version '2.1.6.RELEASE'
id 'java'
}
apply plugin: 'io.spring.dependency-management'
repositories {
mavenCentral()
}
dependencies {
//模块引用
implementation project(":lib-commons")
implementation project(":lib-external")
//SpringBoot
implementation 'org.springframework.boot:spring-boot-starter-web'
implementation 'org.springframework.boot:spring-boot-starter-validation'
annotationProcessor 'org.springframework.boot:spring-boot-configuration-processor'
//MysqlConnector
implementation 'mysql:mysql-connector-java'
//MybatisPlus
implementation 'com.baomidou:mybatis-plus-boot-starter:3.1.2'
//通用基础库
implementation 'org.apache.commons:commons-lang3:3.9'
implementation 'commons-codec:commons-codec:1.12'
implementation 'jaxen:jaxen:1.2.0'
implementation 'javax.annotation:javax.annotation-api:1.2'
//Json Gson
implementation 'org.json:json:20180813'
implementation 'com.google.code.gson:gson:2.8.5'
//网络请求库:OkHttp
implementation 'com.squareup.okhttp3:okhttp:3.10.0'
implementation 'com.squareup.okio:okio:1.14.1'
//Socket库:SocketIO
implementation 'com.corundumstudio.socketio:netty-socketio:1.7.17'
//Lombok注解插件
implementation 'org.projectlombok:lombok:1.16.8'
annotationProcessor 'org.projectlombok:lombok:1.16.8'
//控制台彩色字体库
implementation 'org.fusesource.jansi:jansi:1.18'
}
添加SpringBoot配置文件
【resources/application.properties】是SpringBoot默认的配置文件,我们需要添加一些必要配置服务才能启动
比如项目地址,项目端口,数据库地址,数据库帐号密码等等,这里数据库大家需要改成自己的可用数据库
#服务地址
server.port=8001
server.servlet.context-path=/hello
server.servlet.session.timeout=2000s
#数据库配置
spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver
spring.datasource.url=jdbc:mysql://192.168.8.83:3306/dwdb2
spring.datasource.username=root
spring.datasource.password=123456
除了【application.properties】这个文件之外,我们还可以建立自己的配置文件,用于存储业务配置
建议不要把所有东西都写在【application.properties】里面,会影响可读性,这个文件只存储Spring框架的配置即可
比如这里我们就新建了一个【user_config.properties】文件,我们可以自己通过【java.util.Properties】类来读取配置
添加Application类
Application类是SpringBoot默认的启动入口,其实一个空的SpringBoot项目只需要一个Application类就够了
Application类的作用是启动SpringBoot服务,SpringBoot服务启动后,就会自动去检索包目录查找所有的类文件
SpringBoot服务根据注解来判断是否需要创建对应的Controller,Mapper,Bean的实例
因此只有Application类是必需的,其它类都是根据需要来添加的
package com.easing.backend.tools;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;
@Controller
@RequestMapping("/api")
public class ApiController {
@ResponseBody
@RequestMapping("/about")
public String about() {
return "a SpringBoot Project with Gradle";
}
}
手动修改工程
Gradle项目结构其实非常简单,无非就是三点:
工程通过settings.gradle文件来定义子模块
模块通过build.gradle来定义引用的库或其它模块
通过Project Structure菜单来配置哪些目录是代码,哪些目录是资源,哪些目录应该被排除出项目
了解项目结构和构建原理,可以加深我们对构建工具的理解,出了问题时可以自己去查找问题所在
如果不理解文件之间的关联,只会通过可视化菜单来操作,出了问题经常就会手足无措
Gradle项目结构一般如下
main旁边的test文件夹是用于单元测试的目录,如果不需要可以按两次Delete删除
第一次Delete将目录从模块中移除,第二次Delete彻底删除文件
源代码下载
下载地址:a SpringBoot Project with Gradle
源码使用说明
【project-hello】是工程根目录,打开工程时,请打开这个目录
【lib-external】属于外部模块,是为了演示引入外部模块的,并不属于工程目录
注意事项
Gradle中的依赖,除了SpringBoot和通用基础库部分,其它的可以删除
因为你们的数据库环境,IDEA版本,插件版本,和我的都不一样,根据经验,这些不兼容可能会导致编译失败
另外,有的版本的IDEA在识别Gradle工程上不是很完善,不会自动生成程序的启动入口,需要自己手动创建启动规则