为什么我要使用Gradle





创建父级工程

由于一个工程可能包含多个模块,因此我们需要有个父级工程来包含它们,以方便以后的管理
即便我们的代码只有一个模块,从规范的角度来说,也应当有个父级工程,以方便日后的扩展

我们新建一个名为【project-hello】的文件夹,作为父级工程的存放位置

gradle打包springboot项目 指定路径 springboot多模块gradle打包_SpringBoot


gradle打包springboot项目 指定路径 springboot多模块gradle打包_SpringBoot_02


由于父级工程只是一个容器,所以我们不需要代码目录,可以从项目结构中删除,当然也可以留下来用于存放测试代码

在【Project Structure】界面中,将【src目录】标记为【Excluded】,确定后手动删除该文件夹即可

gradle打包springboot项目 指定路径 springboot多模块gradle打包_java_03

创建子模块

在工程目录上右键,【New】-【Module】,选择【Gradle】和【Java】,和创建工程时操作一样,即可创建多个子模块

gradle打包springboot项目 指定路径 springboot多模块gradle打包_SpringBoot_04


gradle打包springboot项目 指定路径 springboot多模块gradle打包_SpringBoot_05

引入外部模块

如果我们不想新建模块,而是希望使用已有的代码作为模块,那么有两种方法

一种是将该模块的代码直接拷到当前工程下,在【settings.gradle】中添加【include ‘xxx’】即可

另一种方法是单独写一行脚本,来指定该模块的位置,但是Gradle只支持通过相对路径来指定位置

如果不是多个工程共享同一份代码的话,建议使用第一种方式,比较放在一起更加容易维护、备份、打包

gradle打包springboot项目 指定路径 springboot多模块gradle打包_java_06

模块间依赖

在模块的【build.gradle】中添加以下脚本,即可引用其它模块,外部模块也是一样的,因此模块名都已经在工程中定义了,不管是同工程的还是外部的,都可以直接使用

dependencies {
	
	    implementation project(":lib-commons")
	    implementation project(":lib-external")
	}

gradle打包springboot项目 指定路径 springboot多模块gradle打包_spring_07


添加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彻底删除文件

gradle打包springboot项目 指定路径 springboot多模块gradle打包_spring_08


源代码下载

下载地址:a SpringBoot Project with Gradle

源码使用说明

【project-hello】是工程根目录,打开工程时,请打开这个目录
【lib-external】属于外部模块,是为了演示引入外部模块的,并不属于工程目录

注意事项

Gradle中的依赖,除了SpringBoot和通用基础库部分,其它的可以删除
因为你们的数据库环境,IDEA版本,插件版本,和我的都不一样,根据经验,这些不兼容可能会导致编译失败

另外,有的版本的IDEA在识别Gradle工程上不是很完善,不会自动生成程序的启动入口,需要自己手动创建启动规则

gradle打包springboot项目 指定路径 springboot多模块gradle打包_Gradle_09