最近公司要上新项目,技术栈:springboot、springcloud,项目管理工具:gradle,架构模式:分布式。这里我们纯手(不含项目创建)工搭建,方便给不熟悉gradle的同学一个参考。springboot使用2.1.9版本,gradle使用5.2.1版本。
项目建立
在https://start.spring.io网站上创建项目,我一般都在该网站创建项目,个人习惯。我在该网站上共创建了7项目,分别是eureka(微服务注册中心)、iov-api(移动端后台服务)、iov-core(公共模块)、iov-manager(pc端服务后台)、iov-gateway(网关)、iov-task(定时作业)、iov-data-process(数据处理服务)。项目建好之后,另外建立一个文件夹,比如命名为iov,在该文件下建立两个文件,一个是build.gradle文件,一个是settings.gradle文件。建好之后将刚才下载的项目复制到该文件下,在一一修改配置文件即可。这是一个完整的分布式项目,下面看下截图,更直观一些。

配置文件修改
1、主项目文件修改
build文件内容如下:
plugins {
id 'org.springframework.boot' version'2.1.9.RELEASE'
id 'java'
}
repositories {
maven { url 'http://maven.aliyun.com/nexus/content/groups/public' }
mavenCentral()
}
// subprojects : 所有子模块共享的配置
subprojects{
apply plugin:'java'
apply plugin:'idea'
apply plugin:'eclipse'
apply plugin:'jacoco'
//使用springboot插件
apply plugin:'org.springframework.boot'
//版本管理插件
apply plugin:'io.spring.dependency-management'
group ='pro.tscar.sgcc.ecp'
// JVM 版本号要求
sourceCompatibility =1.8
targetCompatibility =1.8
version = '3.0-SNAPSHOT'
// java编译的时候缺省状态下会因为中文字符而失败
[compileJava,compileTestJava,javadoc]*.options*.encoding ='UTF-8'
bootJar {
enabled =false // 默认不需要打可执行jar包
}
// 配置所有子模块的依赖仓库地址
repositories {
maven { url 'http://maven.aliyun.com/nexus/content/groups/public' }
maven { url'https://repo.spring.io/milestone' }
mavenCentral()
}
//所有子模块共有依赖
dependencies {
testImplementation 'org.springframework.boot:spring-boot-starter-test'
}
}
//所有子项目都依赖iov-core包排除iov-core项目本身
configure(subprojects.findAll({ it.name != 'iov-core' })) {
dependencies {
compile project(":iov-core")
}
}
settings.gradle文件内容如下:
这里配置项目名称,并导入子项目
rootProject.name = 'iov'
include 'iov-core'
include 'iov-manager'
include 'iov-gateway'
include 'iov-api'
include 'iov-task'
include 'iov-data-process'
include 'eureka'
2、子项目文件修改
删除子项目中的settings.gradle文件,只保留build文件即可,其它不变。
iov-core配置介绍
iov-core作为公共模块,有些特殊,所以先介绍该子项目,下面先看下项目结构。

除了删除settings.gradle文件之外,这里我们删了springboot启动类,此时iov-core就是一个纯java项目了。
下面我们看下iov-core的gradle配置:
jar {
enabled = true
}
bootJar {
enabled = false // 默认不需要打可执行jar包
}
dependencies {
compile 'org.springframework.boot:spring-boot-starter-data-jdbc'
compile 'org.springframework.boot:spring-boot-starter-data-jpa'
compile 'org.springframework.boot:spring-boot-starter-data-redis'
compile 'org.springframework.boot:spring-boot-starter'
compile 'org.springframework.boot:spring-boot-starter-logging'
compile 'org.springframework.boot:spring-boot-starter-aop'
compile 'com.vladmihalcea:hibernate-types-5:1.2.0'
compile 'mysql:mysql-connector-java:5.1.47'
compile 'org.apache.commons:commons-lang3:3.8.1'
compile 'commons-codec:commons-codec:1.12'
compile 'org.apache.commons:commons-collections4:4.3'
compile 'commons-io:commons-io:2.6'
compile 'joda-time:joda-time:2.10.1'
compile 'commons-collections:commons-collections:3.2.1'
compile 'commons-beanutils:commons-beanutils:1.9.2'
compile 'org.apache.httpcomponents:httpclient:4.5.6'
compile 'org.apache.poi:poi:4.1.0'
compile group: 'com.google.guava', name: 'guava', version: '23.0'
compile group: 'com.google.code.gson', name: 'gson', version: '2.8.5'
compile 'javax.validation:validation-api:2.0.1.Final'
compile 'org.bouncycastle:bcprov-jdk15on:1.60'
compile 'ch.qos.logback:logback-classic:1.2.3'
compile 'org.slf4j:jul-to-slf4j:1.7.25'
compile 'org.slf4j:log4j-over-slf4j:1.7.25'
compile 'javax.mail:mail:1.4.7'
compile 'com.alibaba:druid:1.1.12'
compile 'com.alibaba:fastjson:1.2.60'
implementation 'org.springframework.kafka:spring-kafka:2.2.0.RELEASE'
implementation 'org.apache.kafka:kafka-clients:2.0.0'
compile 'org.apache.curator:curator-framework:2.12.0'
compile 'org.apache.curator:curator-recipes:2.12.0'
compile 'redis.clients:jedis:3.1.0'
compile 'io.springfox:springfox-swagger2:2.8.0'
compile 'io.springfox:springfox-swagger-ui:2.8.0'
}
这里注意compile 和 implementation 的区别,如果引入的jar仅仅在该项目中使用,则使用implementation 关键字,否则使用compile 。
iov-core配置完成,已可以作为jar包供其它子项目使用。
其它子项目配置介绍
这里我们只介绍一例即可,其它都一样。我们就一iov-task为例介绍,下面看下项目结构。

这里就比较简单了,我们直接看下iov-task的gradle配置文件:
jar {
enabled = true
}
bootJar {
enabled = true
}
dependencies {
implementation 'org.springframework.boot:spring-boot-starter-web'
}
是的,iov-task的配置就是这么简单。
总结
至此,我们基于springboot、gradle构建的多模块项目已经构建完成。我个人比较喜欢gradle,使用gradle很少遇到,至少我使用以来从未遇到过jar包冲突的情况,gradle会自动帮你选择版本,这是gradle的一大优势,详细的大家可以自己去找资料,这里不再解释。
网友评论