干货|SpringBoot-Maven与Gradle多模块搭建

news2024/11/28 8:30:37

比较熟悉的模式是Springboot+Maven多模块的组织方式,由于近期Gradle势力很猛,据Gradle官网给出的5种压测场景的数据来看,Gradle的处理性能确实比Maven快,所以就来体验一下Gradle怎么做多模块搭建和各种依赖的引入和查看。

对Gradle官网提供的Maven与Gradle的对比感兴趣的,可以点:https://gradle.org/maven-vs-gradle/
在这里插入图片描述

材料:

  • SpringBoot 2.3.12.RELEASE
  • IDEA
  • Maven 3.6.0
  • Gadle 7.4

快速浏览:

  • 1、IDEA中maven多模块
    • 常规搭建流程
    • Maven常规指令
  • 2、IDEA中gradle多模块
    • 搭建流程
    • gradle常用指令

1、IDEA中maven多模块

在这里插入图片描述
官网直击:https://maven.apache.org/

常规搭建流程

  • 新建一个项目,可以使用Spring Initializer进行初始化,选maven项目
  • 删除src目录,仅保留外部的pom.xml
  • 右击父项目,New->Module->Maven项目,填项目名就可以产生一个maven子项目
  • 在父项目中pom.xml自动写入子模块名,子模块pom.xml中自动写入父项目名
  • 在父项目中可以做版本的统一定义,依赖的统一申明

Maven常规指令

常规打包指令

#跳过单测打包
mvn clean package -Dmaven.test.skip=true
#跳过单测打包,并把打好的包上传到本地仓库
mvn clean install -Dmaven.test.skip=true
#跳过单测打包,并把打好的包上传到远程仓库
mvn clean deploy -Dmaven.test.skip=true

其他指令

#查看版本 
mvn -v 

#创建 Maven 项目 
mvn archetype:create 

#编译源代码 
mvn compile

#编译测试代码 
mvn test-compile 

#运行应用程序中的单元测试 
mvn test 

#生成项目相关信息的网站 
mvn site 

#依据项目生成 jar 文件 
mvn package 

#在本地 Repository 中安装 jar
mvn install  

#忽略测试文档编译
mvn -Dmaven.test.skip=true  

#清除目标目录中的生成结果
mvn clean  

#将.java类编译为.class文件
mvn clean compile  

#进行打包
mvn clean package  

#执行单元测试
mvn clean test 

#部署到版本仓库 
mvn clean deploy 

#使其他项目使用这个jar,会安装到maven本地仓库中 
mvn clean install 

#创建项目架构
mvn archetype:generate  

#查看已解析依赖 
mvn dependency:list 

#【*常用*】看到依赖树
mvn dependency:tree com.xx.xxx  

#查看依赖的工具 
mvn dependency:analyze 

#从中央仓库下载文件至本地仓库
mvn help:system  

#查看当前激活的profiles 
mvn help:active-profiles 

#查看所有profiles 
mvn help:all-profiles 

#查看完整的pom信息
mvn help:effective -pom 

2、IDEA中gradle多模块

在这里插入图片描述
官网直击:https://gradle.org/

搭建流程

基本流程是一致的,相对Maven的配置,gradle父项目中有一个subprojects的配置,需要手动调整。

  • 新建一个项目,可以使用【Spring Initializer】进行初始化,选择gradle项目
  • 删除src目录,保留外部的【build.gradle/gradlew/gradlew.bat/setting.gradle】
  • 项目顶级目录下会自动建立gradle目录,【gradle->wrapper->gradle-wrapper.jar/gradle-wrapper.preperties】,如果是自建的项目需要注意引入(此处项目maven项目会多比较多文件)
  • 右击父项目,【New->Module->Gradle】项目,填项目名就可以产生一个gradle子项目。子模块只有一个【build.gradle】文件
  • 在父项目setting.gradle中自动写入子模块名【include “子模块”】,不同于maven,这边是将子模块的包含关系写在另外的文件中。子模块中没有父项目的痕迹。
  • 在父项目中可以做版本的统一定义【ext】,依赖的统一申明subprojects{dependencies{} dependencyManagement{}}
  • gradle项目有一定差异的是,需要在父项目中将子模块的依赖单独写明
plugins {
    id 'org.springframework.boot' version '2.3.12.RELEASE'
    id 'io.spring.dependency-management' version '1.0.11.RELEASE'
    id 'java'
}

group = 'com.learning'
version = '0.0.1-SNAPSHOT'
sourceCompatibility = '11'

configurations {
    compileOnly {
        extendsFrom annotationProcessor
    }
}

repositories {
    mavenCentral()
}

ext {
    set('springCloudVersion', "Hoxton.SR12")
}

subprojects {

    apply plugin: 'java'
    apply plugin: 'org.springframework.boot'  //引入外部定义的插件
    apply plugin: 'io.spring.dependency-management' //引入外部定义的插件

    ext {
        springVersion = "2.3.12.RELEASE" //统一定义版本,后面引用
        compileJava.options.encoding = 'UTF-8'
        compileTestJava.options.encoding = 'UTF-8'
        springCloudVersion = "Hoxton.SR12"
    }

    sourceCompatibility = 1.11
    targetCompatibility = 1.11

    tasks.withType(JavaCompile) {
        options.encoding = 'UTF-8'
    }

    //配置依赖
    dependencies {
        implementation 'org.springframework.boot:spring-boot-starter' //一次性定义子项目包含的依赖
        implementation 'com.alibaba:fastjson:2.0.33' //指定版本
        compileOnly 'org.projectlombok:lombok'
        annotationProcessor 'org.projectlombok:lombok'
        testImplementation('org.springframework.boot:spring-boot-starter-test') {
            exclude group: 'org.junit.vintage', module: 'junit-vintage-engine'
        }
    }

    dependencyManagement {
        imports {
            mavenBom "org.springframework.cloud:spring-cloud-dependencies:${springCloudVersion}"
        }
    }

    tasks.named('test') {
        useJUnitPlatform()
    }
}

Gradle常用指令

  • Gradle 是google开发的基于groovy语言 ,用于代替 ant 构建的一种配置型语言
  • 基于gradle构建的工程都有一个gradle本地代理,叫做 gradle wrapper,就是前面步骤里面项目根目录下gradle子目录里面的内容
# 查看构建版本
./gradlew -v
# 清除build文件夹
./gradlew clean
a@b:~/files/gitFile/springcloudall$ ./gradlew  clean

BUILD SUCCESSFUL in 827ms
3 actionable tasks: 2 executed, 1 up-to-date

# 检查依赖并编译打包
./gradlew build

./gradlew dependencies

a@b:~/files/gitFile/springcloudall/eurekaclient$ ../gradlew dependencies

> Task :eurekaclient:dependencies

------------------------------------------------------------
Project ':eurekaclient'
------------------------------------------------------------

annotationProcessor - Annotation processors and their dependencies for source set 'main'.
\--- org.projectlombok:lombok -> 1.18.20

apiElements - API elements for main. (n)
No dependencies

archives - Configuration for archive artifacts. (n)
No dependencies

bootArchives - Configuration for Spring Boot archive artifacts.
No dependencies

compileClasspath - Compile classpath for source set 'main'.
+--- org.projectlombok:lombok -> 1.18.20
+--- org.springframework.boot:spring-boot-starter -> 2.3.12.RELEASE
|    +--- org.springframework.boot:spring-boot:2.3.12.RELEASE
|    |    +--- org.springframework:spring-core:5.2.15.RELEASE
|    |    |    \--- org.springframework:spring-jcl:5.2.15.RELEASE
|    |    \--- org.springframework:spring-context:5.2.15.RELEASE
|    |         +--- org.springframework:spring-aop:5.2.15.RELEASE
|    |         |    +--- org.springframework:spring-beans:5.2.15.RELEASE
|    |         |    |    \--- org.springframework:spring-core:5.2.15.RELEASE (*)
|    |         |    \--- org.springframework:spring-core:5.2.15.RELEASE (*)
|    |         +--- org.springframework:spring-beans:5.2.15.RELEASE (*)
|    |         +--- org.springframework:spring-core:5.2.15.RELEASE (*)
|    |         \--- org.springframework:spring-expression:5.2.15.RELEASE
|    |              \--- org.springframework:spring-core:5.2.15.RELEASE (*)
|    +--- org.springframework.boot:spring-boot-autoconfigure:2.3.12.RELEASE
|    |    \--- org.springframework.boot:spring-boot:2.3.12.RELEASE (*)
|    +--- org.springframework.boot:spring-boot-starter-logging:2.3.12.RELEASE
|    |    +--- ch.qos.logback:logback-classic:1.2.3
|    |    |    +--- ch.qos.logback:logback-core:1.2.3
|    |    |    \--- org.slf4j:slf4j-api:1.7.25 -> 1.7.30
|    |    +--- org.apache.logging.log4j:log4j-to-slf4j:2.13.3
|    |    |    +--- org.slf4j:slf4j-api:1.7.25 -> 1.7.30
|    |    |    \--- org.apache.logging.log4j:log4j-api:2.13.3
|    |    \--- org.slf4j:jul-to-slf4j:1.7.30
|    |         \--- org.slf4j:slf4j-api:1.7.30
|    +--- jakarta.annotation:jakarta.annotation-api:1.3.5
|    +--- org.springframework:spring-core:5.2.15.RELEASE (*)

# 或者模组的 依赖
./gradlew app:dependencies
# 检索依赖库
./gradlew app:dependencies | grep CompileClasspath
# windows 没有 grep 命令
./gradlew app:dependencies | findstr "CompileClasspath"

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/626766.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【unity】燧光MR设备接入极简教程

官网说明文档: https://doc.ximmerse.com/sdkconf/unityxrsdk/index.html 一、环境准备 1、Unity环境准备 配置adb环境 官网下载:https://developer.android.google.cn/studio/releases/platform-tools 找到SDK Platform-Tools下载 参照 此教程 配置ad…

vulnhub dc-9

1.信息搜集 端口 80 20 filter 存活ip 172.16.1.65 2.访问网站进行信息搜集 cms staff 寻找漏洞 登录处尝试弱口令失败,尝试sql失败 search处sql注入 3.sqlmap跑用户名和密码 注意这题两个库的用户名和密码都需要 UserDetails,Users search处是post传参&…

trace clock structure的若干方法

这里分享几个trace clock structure的方法,各有特点。 1)report_clock_qor -to FF/CK -clock $clk_name -type structure 报告的结果与innovus的clock structure报告类似,如下示例。 (H) clock_root_name # sdc中的root name (0) cts_buf: A-> Y [REF: XX/BUF_XX] [Lo…

【Android开发基础】说说模块设计(下拉刷新、图片查看、布局设计)

文章目录 一、引言二、设计1、下拉刷新(1)依赖(2)使用 2、图片需求 三、结论 一、引言 描述:设计一个简单说说功能模块需求: 1、能够下拉刷新,更新数据 2、一条说说里允许包含多张图片&#xf…

第七章 Electron Vue3实现音乐播放器

一、介绍 🍑 🍑 🍑 一个音乐播放器应该具备播放、暂停、上一首、下一首、播放模式(单曲循环、列表循环、顺序播放……)。除了这些比如还可以扩展进度条的展示、拖拽、音量大小的调节,如果资源允许的话可以…

跨境电商开发的基本流程

在全球化的浪潮下,跨境电商已成为一个热门的商业模式。然而,很多人在跨境电商开发的过程中遇到了许多问题。本文将介绍跨境电商开发的流程,希望能够帮助大家更好地了解这个行业。 首先,跨境电商开发的第一步是寻找合适的产品。这…

DOC文件丢失怎么恢复?用这7种方法找回

在日常生活和工作中,我们经常会因为各种原因丢失重要的DOC文件,这给我们带来了不小的困扰。但是,不必担心,在本文中,我们将带大家了解一下DOC文件丢失怎么恢复。 关于DOC文件 DOC文件是指一种微软公司开发的文字处理软…

【短视频抖音多账号管理系统源码开发路径】

文章目录 概要整体架构流程技术名词解释技术细节小结 概要 短视频矩阵系统开发涉及到多个领域的技术,包括视频编解码技术、大数据处理技术、音视频传输技术、电子商务及支付技术等。因此,短视频矩阵系统开发人员需要具备扎实的计算机基础知识、出色的编…

多边形三角化Earcut分析,以mapbox EarCut源码举例

多边形三角化,简单来说,就是给定一圈有序的多边形点生成三角面片,EarCut的原理描述网络上有很多(如https://blog.csdn.net/qq_24459491/article/details/102976671),就不细说了。但是有的时候看是一回事&am…

Ae 效果详解:Mocha AE

Ae菜单:效果/Boris FX Mocha/Mocha AE Effects/Boris FX Mocha/Mocha AE Ae菜单:动画/Track in Boris FX Mocha Animation/Track in Boris FX Mocha Mocha Pro 是一款强大的平面跟踪软件。既可作为独立软件运行,也提供了 Ae 的插件版本&#…

1.4C++运算符重载作函数

C运算符重载函数作为类成员函数 作为类成员函数时,运算符重载函数使用类的成员变量作为操作数。 写个 demo: 运算符重载函数作为类成员函数时,需要注意:运算符重载函数必须是类的成员函数,不能是普通函数或者全局函…

MIT6.024学习笔记(二)——图论(1)

学习不是为了竞争和战胜他人,而是为了更好地了解自己和世界。 - 达赖喇嘛 文章目录 图的相关概念涂色问题基础涂色方法(贪婪算法)证明 二分图匹配问题应用:稳定婚烟问题算法性质及其证明 图的相关概念 图的定义:一组&…

We need you | 隐语开源共建计划第一期任务等你认领

作为隐私计算开源界的一颗新星,隐语一直致力于推动隐私计算行业的发展,同时也在不断发展和完善中。通过开放、透明和共享的方式,协同行业优秀人才协同合作,推动隐私计算领域蓬勃发展,这是隐语开源的意义。因此&#xf…

FPGA多路视频叠加融合 HLS算法实现 提供2套工程源码和技术支持

目录 1、前言2、视频叠加模块的功能和性能3、HLS视频叠加融合设计4、vivado工程1--单路同源视频的缩放叠加详细设计方案vivado工程详解SDK工程详解 5、vivado工程2--两路非同源视频的缩放叠加详细设计方案vivado工程详解SDK工程详解 6、上板调试验证7、福利:工程代码…

MySQL底层数据结构

1、引入 一个sql语句在mysql中究竟是如何运行的?又应该通过怎样的方式去查找我们要找的数据?这里就涉及到几种存储数据的算法; 可以做索引的数据结构有数组、链表、二叉搜索树和B树(B-树、B树)。 2、各种数据结构 …

flutter多版本切换

方式一:符号连接(软链接) 注:无需修改环境变量,也不用重启AndroidStudio mac具体flutter版本切换操作步骤: 1、项目clean然后切换自己需要的分支 2、删除文件夹flutter目录文件(这里的flutter是原来的符号连接&…

若依集成分库分表(一)

1.本次需求为同库分表 1.1 引入pom依赖 <!-- sharding-jdbc分库分表 --> <dependency><groupId>org.apache.shardingsphere</groupId><artifactId>sharding-jdbc-core</artifactId><version>4.1.1</version> </dependenc…

Linux内核中内存管理相关配置项的详细解析2

接前一篇文章&#xff1a;Linux内核中内存管理相关配置项的详细解析1 3. Default compressor&#xff08;默认压缩器&#xff09; 此项展开后如下图所示&#xff1a; 此项的内核源码详细解释为&#xff1a; Selects the default compression algorithm for the compressed cac…

谷歌发布一个免费的生成式人工智能课程

在过去几周&#xff0c;我们看到的都是AI将如何改变生活&#xff0c;无论是ChatGPT的文本生成&#xff0c;还是SD&#xff0c;Midjourney 的图像生成&#xff0c;这些AI的特点就是都是生成式的AI。而几天前&#xff0c;谷歌推出了一个生成式人工智能学习课程&#xff0c;课程涵…

美团太细了:Springcloud 微服务优雅停机,如何实现?

说在前面 关于Spring Boot、Spring Cloud应用的优雅停机&#xff0c;平时经常会被问到&#xff0c;这也是实际应用过程中&#xff0c;必须要掌握的点。 在40岁老架构师 尼恩的读者社区(50)中&#xff0c;最近有小伙伴拿到了一线互联网企业如美团、拼多多、极兔、有赞、希音的…