目录
  1. 1. Gradle
    1. 1.1. 安装
    2. 1.2. 环境配置
  2. 2. 初始化项目
    1. 2.1. 初始化根项目
    2. 2.2. 配置build.gradle
      1. 2.2.1. 声明插件
      2. 2.2.2. allProjects configure
      3. 2.2.3. 依赖配置
      4. 2.2.4. subprojects configure
    3. 2.3. 新建子项目
    4. 2.4. 项目打包
      1. 2.4.1. bootJar
      2. 2.4.2. Application plugin
  3. 3. 项目地址
Gradle构建SpringBoot 2.x多模块项目打包

Gradle

安装

以gradle4.10.2为例

下载gradle 4.10.2版本

m-1.png

环境配置

找到gradle解压的路径,然后添加到path变量中;

e.g.

1
2
# 本地解压在D盘
path: D:\gradle-4.10.2\bin

打开cmd,输入gradle --version,出现一下内容即可

m-2.png

初始化项目

初始化根项目

1
2
3
4
5
6
# 依然使用cmd,选择好项目路径
# 创建根项目 名称
mkdir multi-project
cd multi-project
gradle init
# 此时gradle会自动初始化,等待完成即可

使用工具打开刚才初始化的项目,这里使用idea

  • idea打开项目时的设置

m-3.png

  • 项目结构

m-4.png

配置build.gradle

在此可以对所有项目进行配置dependencies,plugins,task

声明插件

build.gradle

1
2
3
4
5
plugins {
//https://docs.spring.io/spring-boot/docs/current/gradle-plugin/reference/html/
id 'org.springframework.boot' version '2.1.3.RELEASE' apply false
id 'java'
}

一些需要先声明的插件可以在此声明

allProjects configure

build.gradle

1
2
3
4
5
6
7
8
9
10
allprojects {

// 定义仓库
repositories {
maven{ url 'https://maven.aliyun.com/repository/public/' }
}

group = 'com.chensubao'
version = '1.0.0'
}
依赖配置

将所需的依赖写到一个gradle文件中,在从build.gradle文件中应用此gradle文件;新建dependencies.gradle,内容如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
ext.versions = [
springBoot : '2.1.3.RELEASE',
mpStarter : '3.0.7.1',
jedis : '3.0.1',
commonsLang3 : '3.8.1',
commonsIo : '2.6',
commonsCodec : '1.11',
mysql : '8.0.15',
lombok : '1.18.6'
]

// 各种可能会用到的jar包
ext.libraries = [
// Spring Boot
"spring-boot-starter" : "org.springframework.boot:spring-boot-starter:${versions.springBoot}",
"spring-boot-starter-web" : "org.springframework.boot:spring-boot-starter-web:${versions.springBoot}",
"spring-boot-starter-aop" : "org.springframework.boot:spring-boot-starter-aop:${versions.springBoot}",
"spring-boot-starter-log4j2" : "org.springframework.boot:spring-boot-starter-log4j2:${versions.springBoot}",
"spring-boot-starter-test" : "org.springframework.boot:spring-boot-starter-test:${versions.springBoot}",
"spring-boot-starter-tomcat" : "org.springframework.boot:spring-boot-starter-tomcat:${versions.springBoot}",
"spring-boot-starter-jdbc" : "org.springframework.boot:spring-boot-starter-jdbc:${versions.springBoot}",
"spring-boot-starter-data-rest" : "org.springframework.boot:spring-boot-starter-data-rest:${versions.springBoot}",
// apache tools
"commons-io" : "commons-io:commons-io:${versions.commonsIo}",
"commons-lang3" : "org.apache.commons:commons-lang3:${versions.commonsLang3}",
"commons-codec" : "commons-codec:commons-codec:${versions.commonsCodec}",
// Cache
"jedis" : "redis.clients:jedis:${versions.jedis}",
// DB
"mysql-driver" : "mysql:mysql-connector-java:${versions.mysql}",
//lombok
"lombok" : "org.projectlombok:lombok:${versions.lombok}"
]

在build.gradle中应用

build.gradle

1
apply from: 'dependencies.gradle'
subprojects configure

配置所有子项目

build.gradle

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
subprojects {

apply plugin: 'java'
apply plugin: 'idea'
// spring统一依赖管理
apply plugin: 'io.spring.dependency-management'

dependencyManagement {
imports {
mavenBom org.springframework.boot.gradle.plugin.SpringBootPlugin.BOM_COORDINATES
}
}

/**
* 避免出现idea中可以运行,编译报错:程序包xxx不存在
* https://blog.csdn.net/li295214001/article/details/88942082
*/
jar {
enabled = true
}

bootJar {
enabled = true
}

sourceCompatibility = 1.8
targetCompatibility = 1.8

// java编译的时候缺省状态下会因为中文字符而失败
[compileJava,compileTestJava,javadoc]*.options*.encoding = 'UTF-8'

dependencies {
implementation libraries['spring-boot-starter']
implementation libraries['spring-boot-starter-web']
implementation libraries['spring-boot-starter-aop']
runtimeOnly libraries['mysql-driver']
testImplementation libraries['spring-boot-starter-test']
}
}

新建子项目

右击跟项目,New–>Module…–>在New Module窗口中左侧选择Gradle,右侧选择框中勾选Java–>Next

m-5.png

  • 可以看到根项目中的settings.gradle自动将刚才新建的子项目包含了进来

m-6.png

  • 子项目中build.gradle配置

m-7.png

项目打包

介绍两种将项目打包为可执行jar的方法,bootJar和application plugin

bootJar
  • 子项目sub-1添加测试类

m-8.png

  • 添加SpringBoot启动类
  • 创建方法与上述一致

Application

m-9.png

  • 启动类子项目添加sub-1依赖

m-10.png

进行打包,在subprojects configure中添加

1
2
// 应用springboot插件, 创建一个可执行jar包
apply plugin: 'org.springframework.boot'
  • 启动类子项目(sub-core)配置build.gradle
1
2
3
4
5
6
bootJar {
baseName = 'leo-api-btr'
manifest {
attributes 'Start-Class': 'com.chensubao.Application'
}
}

在终端中输入gradle :sub-core:bootJar ,该命令会将所有依赖打包在一块生成可执行jar,也会生成一个普通jar(jar名称为子项目名+版本号);缺省路径为:sub-core\build\libs\sub-core-1.0.0.jar。

m-11.png

Application plugin

在跟项目build.gradle里的plugins声明插件

1
2
//https://docs.gradle.org/4.10.2/userguide/application_plugin.html
id 'application'

subprojects configure应用插件

1
2
//application插件打包
apply plugin: 'application'
  • 启动类子项目(sub-core)配置build.gradle
1
2
3
4
application {
applicationName = 'leo-api'
mainClassName = 'com.chensubao.Application'
}

在终端输入命令gradle :sub-core:build -x test,该命令会生成zip和tar的压缩文件,jar包含所有的依赖,以命令脚本启动运行;缺省路径为:sub-core\build\distributions,压缩文件文件中的lib文件夹包含整个项目的jar包,自己建的子项目和启动类子项目也会打包成jar在内;bin文件夹存放启动项目的脚本文件,windows下解压执行.bat文件即可,linux执行当中的.sh文件。

如果加了apply plugin: 'org.springframework.boot'再执行application plugin打包命令,会出现多个以-boot结尾的可执行压缩文件。

m-12.png

项目地址

点击这里

文章作者: 今晚早睡
文章链接: https://www.chensubao.com/article/ba57e6d6.html
版权声明: 本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 洛 苏り

评论