本人在学习Gradle的期间,发现大部分关于gradle项目的构建的文章,不是直接使用spring initializr自动构建,就是搭建项目的配置过于复杂且没有相应的说明,对于刚刚接触gradle的新人而言,会产生很多困惑,想要去更改配置却无从下手。
故而,在这篇文章中,本人使用Idea搭建了一个简易的gradle + springboot的项目,并提供项目的源码,希望能帮助到初次接触gradle的童鞋。
1、Gradle环境的配置及Idea中配置使用
详情参考:https://blog.csdn.net/scropio0zry/article/details/100145818
2、Gradle 项目结构介绍
Gradle项目由一个单一的构建文件 build.gradle 和一个源代码树 src 构成。 大项目可以将其拆分成更小的,相互依赖的模块,以便更容易理解。
多项目构建的结构特征:
- 在项目的根目录或主目录中都有一个settings.gradle文件。
- 根目录或主目录都有一个build.gradle文件。
- 具有自己的build.gradle构建文件的子目录。
3、项目源码地址
https://gitee.com/scorpio0zry/gradle-demo
4、项目搭建
首先,建立根项目 web-test-demo
选择File - New – Project,选择Gradle 点击下一步
填写完 GroupId 和 ArtifactId后,点击下一步
如上图,勾选完后,点击一下步,选择项目名和位置,点击Finish,即可创建一个简单的Gradle项目
选择已经创建好的项目,右键 New – Model,按照上面方式,依次创建子组件web-test-base和web-test-service
由此,我们就可以得到一个Gradle多模块项目,如下图所示
5、项目配置
下面首先看下根项目的settings.gradle 这是用来管理多项目的,里面包含了根项目及子项目的name,无需修改
下面将根项目中的配置文件 build.gradle 的内容清空,并复制以下内容(记得group须改写)
//针对所有project的配置,包含根项目,除此之外还有subprojects 和 project,感兴趣的童鞋可以自行百度查阅
allprojects {
//创建项目时的你填写
group 'com.ryzhang' //改写
version '1.0-SNAPSHOT'
//项目是java项目
apply plugin: 'java'
//项目是idea项目
apply plugin: 'idea'
//jdk版本
sourceCompatibility = 1.8
//仓库:gradle会根据从上到下的顺序依次去仓库中寻找依赖
repositories {
//优先从本地仓库获取
mavenLocal()
//从阿里云或者公司仓库获取
maven {
url 'http://maven.aliyun.com/nexus/content/groups/public/' //配置阿里云 或者 自己公司的仓库
}
//从中央仓库获取
mavenCentral()
}
ext {
//这里管理版本
junitVersion = '4.12'
commonsVesion = '3.0'
slf4jVersion = '1.7.16'
}
//项目中所使用到的依赖,这里添加的依赖会被所有项目,包括root项目继承
dependencies {
testCompile("junit:junit:$junitVersion")
compile("org.slf4j:slf4j-api:$slf4jVersion")
//也可直接将版本写在最后 compile("org.slf4j:slf4j-api:1.7.16")
//另外一种形式 (group + name + version) compile group: 'org.slf4j', name: 'slf4j-api', version: '1.7.16'
}
}
//声明gradle脚本自身需要使用的资源
buildscript {
//repositories为什么要要声明两次
//
//buildscript中的声明是gradle脚本自身需要使用的资源。可以声明的资源包括依赖项、第三方插件、maven仓库地址等。
//
//而在build.gradle文件中直接声明的依赖项、仓库地址等信息是项目自身需要的资源。
repositories {
mavenLocal()
maven {
url "http://maven.aliyun.com/nexus/content/groups/public/"
}
}
ext {
//这里管理版本
springbootVersion = '1.5.8.RELEASE'
}
dependencies {
//spring-boot插件
classpath("org.springframework.boot:spring-boot-gradle-plugin:$springbootVersion")
}
}
子项目base的配置文件 build.gradle 如下
//base 所需要的依赖
dependencies {
compile ("org.apache.commons:commons-lang3:$commonsVesion")
}
base项目仅是一个java项目,用来存放一些公有类及方法,而根项目中allprojects 已经声明了所有项目 均为 java项目
//项目是java项目
apply plugin: 'java'
//项目是idea项目
apply plugin: 'idea'
这里就不需要在进行声明,仅需配置base项目所需的依赖即可
子项目service的配置 build.gradle如下:
apply plugin:'application'
//声明spring-boot插件
apply plugin: "spring-boot"
//启动项
mainClassName = "com.ryzhang.StartServer"
//service项目所需依赖
dependencies {
compile("org.springframework.boot:spring-boot-starter-web")
compile("org.springframework.boot:spring-boot-starter-thymeleaf")
//依赖子项目
compile project (":web-test-base")
}
service项目配置了spring-boot依赖,在此声明了spring-boot插件及启动项
service项目中的启动项 StartServer 如下
package com.ryzhang;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
/**
* @author ryzhang5
* @Package com.ryzhang
* @date 2019/9/20 17:24
* @Copyright
*/
@SpringBootApplication
public class StartServer {
public static void main(String[] args){
SpringApplication.run(StartServer.class);
}
}
这样一个简单的gradle + springboot项目便搭建好了,项目结构及依赖如下图所示
童鞋们可以根据自己的需要在对应项目中dependencies进行依赖添加,并在根项目的配置文件build.gradle的ext中实现依赖版本的管理。
6、Idea管理Gradle项目常用命令
点开Idea右侧Gradle,以下是常用的三个命令及介绍。当然也可以直接启动StartServer来运行程序
7、项目测试
base项目下添加类com.ryzhang.model.Person
package com.ryzhang.model;
/**
* @author ryzhang5
* @Package com.ryzhang.model
* @date 2019/9/22 11:29
* @Copyright
*/
public class Person {
private String name;
private Integer age;
public Person() {
}
public Person(String name, Integer age) {
this.name = name;
this.age = age;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public Integer getAge() {
return age;
}
public void setAge(Integer age) {
this.age = age;
}
}
service项目下添加 com.ryzhang.controller.TestController
package com.ryzhang.controller;
import com.ryzhang.model.Person;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;
/**
* @author ryzhang5
* @Package com.ryzhang.controller
* @date 2019/9/22 11:31
* @Copyright
*/
@Controller
public class TestController {
@RequestMapping("/test")
@ResponseBody
public Person test(){
Person person = new Person("小明",18);
return person;
}
}
添加service项目配置文件application.yml
server:
port: 8082
context-path: /
运行项目,访问 localhost:8082/test 得到结果
PS:如同开头所言,本人刚刚接触Gradle不久,想要深入了解Gradle的话,还是要参考相关书籍以及大佬们的博客。
PS.PS:如果文章有所疏漏,还请大佬指出。