写点什么

Gradle 构建多模块 SpringBoot 应用,mybatis 面试常问问题

用户头像
极客good
关注
发布于: 刚刚

// 本地


mavenLocal()


// 如果有私服就在此配置,如果没有请注释掉


maven {


url 'http://192.168.50.43:8081/repository/aliyun-proxy/'


}


// 阿里云


maven {


url 'http://maven.aliyun.com/nexus/content/groups/public/'


}


// 中央仓库


mavenCentral()


// grandle 插件


maven {


url "https://plugins.gradle.org/m2/"


}


}


}


// 类似 maven 的 dependencyManagement,这里将所有 jar 的版本指定好,子模块在依赖时可以不用指定版本


allprojects { project ->


buildscript {


dependencyManagement {


imports {


mavenBom "org.springframework.boot:spring-boot-starter-parent:${springBootVersion}"


mavenBom "org.junit:junit-bom:5.7.0"


}


dependencies {


dependency 'org.projectlombok:lombok:1.16.16'


dependency 'org.apache.commons:commons-lang3:3.11'


dependency 'commons-collections:commons-collections:3.2.2'


dependency 'net.devh:grpc-server-spring-boot-starter:2.11.0.RELEASE'


}


}


}


}


  1. 上述配置中,我使用了自己在局域网搭建的 nexus3 服务器作为私服,目的是缓存 jar 库,局域网内的速度还是要比阿里云快一些的,如果您没有搭建此类私服,将此配置删除即可(我这里是 http://192.168.50.43:8081/repository/aliyun-proxy/);


  • 现在父工程已经设置完成,可以添加子模块了;

[](

)新增二方库子模块


  1. 二方库是常用功能,A 系统调用 B 系统服务时,通常要求 B 系统提供二方库,里面包含了数据结构和接口定义,这样双方的数据结构和接口都能对齐了,因此咱们来创建一个二方库子模块,里面包含了数据结构和接口;

  2. 新增 Module:



  1. 新增 module 时,依旧是选中 Gradle、JDK1.8、Java:



  1. 模块名为 democlient:



  1. 新增的模块内也有 build.gradle 文件,将里面内容清空后写为以下内容:


// 构建二方库的插件


plugins {


id 'java-library'


}


// 这里可以指定构建出来的 jar 的文件名


archivesBaseName = 'demo-client'


// 子模块自己的依赖


dependencies {


// 使用 api,将依赖传递给使用 democlient 的模块


api 'org.projectlombok:lombok'


// annotationProcessor 不会传递,使用了 lombok 生成代码的模块,需要自己声明 annotationProcessor


annotationProcessor 'org.projectlombok:lombok'


}


  1. 给 democlient 模块增加一个类,其他模块会用到此类:


package com.bolingcavalry.dto;


import lombok.Builder;


import lombok.Data;


import lombok.ToString;


@Data


@ToString


@Builder


public class Student {


String name;


int age;


}


  1. democlient 模块编码完成了,试试构建任务,操作如下图:



  1. 构建完成后生成下图红框中的 jar 文件:



  1. 用解压工具解开上图红框中的文件,除了预料之中的 class 文件,再来检查 META-INF/MANIFEST.MF,如下图所示,是咱们在前面的 gradle 脚本中定制的内容:


![在这里插入图片描述](https://img-blog.csdnimg.cn/20210322083015311.jpg?x-oss-process=image/watermark,type_Z


【一线大厂Java面试题解析+核心总结学习笔记+最新架构讲解视频+实战项目源码讲义】
浏览器打开:qq.cn.hn/FTf 免费领取
复制代码


mFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L2JvbGluZ19jYXZhbHJ5,size_16,color_FFFFFF,t_70)

[](

)新增 SpringBoot 应用模块


接下来要创建的是一个 SpringBoot 应用,并且使用了 democlient 模块中的 Student 类;


  1. 新建 Gradle 模块:



  1. 基本信息如下:



  1. 新模块的 build.gradle 内容如下,有几处要注意的地方稍后会讲到:


plugins {


id 'org.springframework.boot'


}


// 用了插件 org.springframework.boot 之后,jar task 会失效,可用 bootJar 取代


bootJar {


archiveBaseName = project.name


archiveVersion = project.version


manifest {


attributes(


'Created-By': "{System.properties['java.vendor']} ${System.properties['java.vm.version']})".toString(),


'Built-By': 'travis',


'Build-Date': buildDate,


'Build-Time': buildTime,


'Built-OS': "${System.properties['os.name']}",


'Specification-Title': project.name,


'Specification-Version': projectVersion,


'Specification-Vendor': 'Will Zhao',


'Implementation-Title': project.name,


'Implementation-Version': projectVersion,


'Implementation-Vendor': 'Will Zhao'


)


}


}


tasks.withType(JavaCompile) {


options.encoding = "UTF-8"


}


// 子模块自己的依赖


dependencies {


implementation 'org.springframework.boot:spring-boot-starter-web'


// 二方库依赖


implementation project(':democlient')


// annotationProcessor 不会传递,使用了 lombok 生成代码的模块,需要自己声明 annotationProcessor


annotationProcessor 'org.projectlombok:lombok'


}


test {


useJUnitPlatform()


}


  1. 上述脚本中需要有以下四点需要注意:


a. 要使用 springboot 的插件 org.springframework.boot,此处无需指定版本,因为根模块中已通过 mavenBom 导入了版本依赖关系;


b. jar{…}的配置会失效,如果想设置 jar 的一些信息,如文件名、manifest 等,要使用 bootJar 配置;


c. 依赖了 democlient 模块,这是典型的二方库开发和使用方式;


d. 稍后的 java 代码中会实例化 Student 对象,此时用到 lombok 生成的代码,因此要用 annotationProcessor 依赖 lombok 库,否则编译会出问题;


  1. 最后新建一个启动类 DemoApplication,用于验证 springboot 应用能否正常启动,代码中有使用 Student 类,这是为了验证使用二方库是否正常:


package com.bolingcavalry;


import com.bolingcavalry.dto.Student;


import org.springframework.boot.SpringApplication;


import org.springframework.boot.autoconfigure.SpringBootApplication;


import org.springframework.web.bind.annotation.RequestMapping;


import org.springframework.web.bind.annotation.RequestMethod;


import org.springframework.web.bind.annotation.RestController;


import java.util.Date;


@SpringBootApplication


@RestController


public class DemoApplication {


@RequestMapping(value = "/hello", method = RequestMethod.GET)


public String hello() {


return "Hello "


  • new Date()

  • "--"

  • new Student("Tom", 11);


}


public static void main(String[] args) {


SpringApplication.run(DemoApplication.class, args);


}


}


  1. 运行应用试试,操作如下图红框:



  1. 符合预期:



  1. 再验证打包成 jar 是否正常,先停掉前面启动的应用,然后操作如下图红框:



  1. 已生成 jar 文件:



  1. 在 jar 文件所在目录执行命令 java -jar webapp-1.0-SNAPSHOT.jar,启动应用正常:



  • 至此,多模块 Gradle 项目开发就完成了,如果您正在新建此类项目,希望本文能给您提供一些参考;

[](

)你不孤单,欣宸原创一路相伴


  1. [Java 系列](


)


  1. [Spring 系列](


)


  1. [Docker 系列](


)


  1. [kubernetes 系列](


)


  1. [数据库+中间件系列](


)


  1. [DevOps 系列](


)

[](

)欢迎关注公众号:程序员欣宸


微信搜索「程序员欣宸」,我是欣宸,期待与您一同畅游 Java 世界…

用户头像

极客good

关注

还未添加个人签名 2021.03.18 加入

还未添加个人简介

评论

发布
暂无评论
Gradle构建多模块SpringBoot应用,mybatis面试常问问题