Gradle构建多模块SpringBoot应用

ext {

projectVersion = project.version

buildDate = DateTimeFormatter.ISO_LOCAL_DATE.format(buildTimeAndDate)

buildTime = DateTimeFormatter.ofPattern(‘HH:mm:ss.SSSZ’).format(buildTimeAndDate)

}

// 针对所有project的配置,包含根项目

allprojects {

group ‘com.bolingcavalry’

version ‘1.0-SNAPSHOT’

apply plugin: ‘java’

apply plugin: ‘idea’

apply plugin: ‘io.spring.dependency-management’

// 编译相关参数

compileJava {

sourceCompatibility = JavaVersion.VERSION_1_8

targetCompatibility = JavaVersion.VERSION_1_8

options.encoding = ‘UTF-8’

options.compilerArgs = [

‘-Xlint:all’, ‘-Xlint:-processing’

]

}

// Copy LICENSE

tasks.withType(Jar) {

from(project.rootDir) {

include ‘LICENSE’

into ‘META-INF’

}

}

// 生成jar文件时,MANIFEST.MF的内容如下

jar {

manifest {

attributes(

‘Created-By’: “ S y s t e m . p r o p e r t i e s [ ′ j a v a . v e r s i o n ′ ] ( {System.properties['java.version']} ( System.properties[java.version]({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’: project.version,

‘Specification-Vendor’: ‘Will Zhao’,

‘Implementation-Title’: project.name,

‘Implementation-Version’: project.version,

‘Implementation-Vendor’: ‘Will Zhao’

)

}

}

// 仓库

repositories {

// 本地

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/);
  • 现在父工程已经设置完成,可以添加子模块了;

新增二方库

必看视频!获取2024年最新Java开发全套学习资料 备注Java

子模块

  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脚本中定制的内容:

在这里插入图片描述

新增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’: “ S y s t e m . p r o p e r t i e s [ ′ j a v a . v e r s i o n ′ ] ( {System.properties['java.version']} ( System.properties[java.version]({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是否正常,先停掉前面启动的应用,然后操作如下图红框:

在这里插入图片描述

最后

对于很多Java工程师而言,想要提升技能,往往是自己摸索成长,不成体系的学习效果低效漫长且无助。

整理的这些资料希望对Java开发的朋友们有所参考以及少走弯路,本文的重点是你有没有收获与成长,其余的都不重要,希望读者们能谨记这一点。

再分享一波我的Java面试真题+视频学习详解+技能进阶书籍

美团二面惜败,我的凉经复盘(附学习笔记+面试整理+进阶书籍)

/img-blog.csdnimg.cn/2021032710385579.jpg)

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

在这里插入图片描述

最后

对于很多Java工程师而言,想要提升技能,往往是自己摸索成长,不成体系的学习效果低效漫长且无助。

整理的这些资料希望对Java开发的朋友们有所参考以及少走弯路,本文的重点是你有没有收获与成长,其余的都不重要,希望读者们能谨记这一点。

再分享一波我的Java面试真题+视频学习详解+技能进阶书籍

[外链图片转存中…(img-JxN1SJn7-1716441504496)]

  • 27
    点赞
  • 29
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
好的,下面是创建多模块 Spring Boot 工程的步骤: 1. 创建一个空的 Gradle 项目 在命令行中执行以下命令: ``` mkdir myproject cd myproject gradle init --type java-library ``` 这将创建一个名为 `myproject` 的文件夹,并在其中创建一个空的 Gradle 项目。 2. 添加 Spring Boot 插件 在 `build.gradle` 文件中添加 Spring Boot 插件: ``` plugins { id 'org.springframework.boot' version '2.5.0' } apply plugin: 'io.spring.dependency-management' ``` 3. 创建子模块 在 `myproject` 文件夹中创建一个名为 `api` 的子文件夹,并在其中创建一个名为 `build.gradle` 的文件。在 `api/build.gradle` 文件中添加以下内容: ``` plugins { id 'org.springframework.boot' } dependencies { implementation 'org.springframework.boot:spring-boot-starter-web' } ``` 这将创建一个名为 `api` 的子模块,并将其配置为使用 Spring Boot。 4. 创建另一个子模块 在 `myproject` 文件夹中创建一个名为 `core` 的子文件夹,并在其中创建一个名为 `build.gradle` 的文件。在 `core/build.gradle` 文件中添加以下内容: ``` plugins { id 'java-library' } dependencies { api project(':api') } ``` 这将创建一个名为 `core` 的子模块,并将其配置为依赖于 `api` 子模块。 5. 配置 settings.gradle 文件 在 `myproject` 文件夹中创建一个名为 `settings.gradle` 的文件,并添加以下内容: ``` rootProject.name = 'myproject' include 'api' include 'core' ``` 这将告诉 Gradle 包含 `api` 和 `core` 两个子模块。 6. 构建项目 在命令行中执行以下命令构建项目: ``` gradle build ``` 构建成功后,你可以在 `api/build/libs` 和 `core/build/libs` 文件夹中找到生成的 JAR 文件。 以上就是使用 Gradle 创建多模块 Spring Boot 工程的步骤。希望能对你有所帮助。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值