Maven进阶1 -- 分模块开发、依赖管理、聚合与继承、属性、版本管理、多环境开发、跳过测试

目录

1.分模块开发

将原始模块按照功能拆分成若干个子模块,方便模块间的相互调用,接口共享。

 案例:拆分一下这个SSM整合案例

①创建maven模块

 demo项目下的pom.xml文件(主要看一下依赖)

<dependencies><!--依赖domain运行--><dependency><groupId>org.example</groupId><artifactId>demo_pojo</artifactId><version>1.0-SNAPSHOT</version></dependency><!--依赖dao运行--><dependency><groupId>org.example</groupId><artifactId>demo_dao</artifactId><version>1.0-SNAPSHOT</version></dependency><!--其它依赖-->...
</dependencies>

 demo_pojo项目下的pom.xml文件(关注groupId和artifactId)

<groupId>org.example</groupId>
<artifactId>demo_pojo</artifactId>
<version>1.0-SNAPSHOT</version>

  demo_dao项目下的pom.xml文件(关注groupId和artifactId、依赖)

<groupId>org.example</groupId>
<artifactId>demo_dao</artifactId>
<version>1.0-SNAPSHOT</version><dependencies><!--依赖domain运行--><dependency><groupId>org.example</groupId><artifactId>demo_pojo</artifactId><version>1.0-SNAPSHOT</version></dependency>        <dependency><groupId>org.mybatis</groupId><artifactId>mybatis</artifactId><version>3.5.13</version></dependency>
</dependencies>

②通过install指令安装到本地仓库

2.依赖管理

依赖具有传递性,因而demo项目下的pom.xml文件可以简化。

<dependencies><!--依赖dao运行--><dependency><groupId>org.example</groupId><artifactId>demo_dao</artifactId><version>1.0-SNAPSHOT</version></dependency><!--其它依赖-->...
</dependencies>

可选依赖 -- 对外隐藏当前依赖的资源

<dependency><groupId>org.example</groupId><artifactId>demo_dao</artifactId><version>1.0-SNAPSHOT</version><optional>false</optional>
</dependency>

排除依赖 -- 排除当前依赖中的某个资源

<dependency><groupId>org.example</groupId><artifactId>demo_dao</artifactId><version>1.0-SNAPSHOT</version><exclusions><exclusion><groupId>org.mybatis</groupId><artifactId>mybatis</artifactId></exclusion></exclusions>
</dependency>

3.聚合

聚合:将多个模块组织成一个整体,同时进行项目构建。

聚合工程:通常是一个不具有业务功能的 “空” 工程(有且仅有一个pom文件)

作用:当工程中某个模块发生更新时,必须保障工程中相关联的模块同步更新。

例:①创建一个demo_aggregate项目,设置打包类型为pom

<groupId>org.example</groupId>
<artifactId>demo_aggregate</artifactId>
<version>1.0-SNAPSHOT</version>
<packaging>pom</packaging>

②设置当前聚合工程所包含的子模块名称

<!--设置管理的模块名称-->
<modules><module>../demo</module><module>../demo_dao</module><module>../demo_pojo</module>
</modules>

 

4.继承

概念:继承描述的是两个工程间的关系,子工程可以继承父工程的配置信息,常见于依赖关系的继承。能够简化配置减少版本冲突

例:在上面聚合工程的基础上修改配置。 

①提取一些公共性的依赖,放到在父工程demo_aggregate的pom.xml中

<dependencies><dependency><groupId>org.springframework</groupId><artifactId>spring-webmvc</artifactId><version>6.0.10</version></dependency>...
</dependencies>

 ②在子工程demo、demo_dao和demo_pojo中配置当前工程依赖父工程

<parent><groupId>org.example</groupId><artifactId>demo_aggregate</artifactId><version>1.0-SNAPSHOT</version><relativePath>../demo_aggregate/pom.xml</relativePath>
</parent>

③在父工程demo_aggregate的pom.xml中配置子工程中可选的依赖关系

<dependencyManagement><dependencies><dependency><groupId>junit</groupId><artifactId>junit</artifactId><version>4.13.2</version><scope>test</scope></dependency></dependencies>
</dependencyManagement>

在子工程demo中使用父工程中的可选依赖

仅需要配置<groupId>和<artifactId>,无需提供版本,版本由父工程统一提供。

  <dependencies><dependency><groupId>junit</groupId><artifactId>junit</artifactId><scope>test</scope></dependency></dependencies>

5.属性

例1在配置文件pom.xml中自定义属性,从而简化配置。

<!--定义属性-->
<properties><spring.version>6.0.10</spring.version>
</properties><dependencies><dependency><groupId>org.springframework</groupId><artifactId>spring-webmvc</artifactId><version>${spring.version}</version></dependency><dependency><groupId>org.springframework</groupId><artifactId>spring-jdbc</artifactId><version>${spring.version}</version></dependency><dependency><groupId>org.springframework</groupId><artifactId>spring-test</artifactId><version>${spring.version}</version><scope>test</scope></dependency>
</dependencies>

例2资源文件引用属性。

pom.xml文件,自定义属性,配置过滤器

<!--定义属性-->
<properties><jdbc.url>jdbc:mysql://localhost:3306/ssm_db</jdbc.url>
</properties><!--开启资源文件目录加载属性的过滤器-->
<build><resources><resource><directory>${project.basedir}/src/main/resources</directory><filtering>true</filtering></resource></resources>
</build>

②在资源中引用属性

/src/main/resources/jdbc.properties

jdbc.driver=com.mysql.cj.jdbc.Driver
jdbc.url=${jdbc.url}
jdbc.username=root
jdbc.password=123456

6.版本管理

  • SNAPSHOT(快照版本):项目开发过程中临时输出的版本,称为快照版本。
  • RELEASE(发布版本):较为稳定的版本。

7.多环境开发

不同环境下,所需要的配置可能不同。

 在demo_aggregate工程的pom.xml文件中配置多环境。

<profiles><!--开发环境--><profile><id>env_dep</id><properties><jdbc.url>jdbc:mysql://127.0.0.1:3306/ssm_db</jdbc.url></properties><!--设置是否为默认启动环境--><activation><activeByDefault>true</activeByDefault></activation></profile><!--生产环境--><profile><id>env_pro</id><properties><jdbc.url>jdbc:mysql://127.1.1.1:3306/ssm_db</jdbc.url></properties></profile><!--开发环境--><profile><id>env_test</id><properties><jdbc.url>jdbc:mysql://127.2.2.2:3306/ssm_db</jdbc.url></properties></profile>
</profiles>

8.跳过测试

应用场景:①功能更新中且没有开发完毕。②快速打包

①快捷方式

 ②细粒度控制跳过测试

<plugins><plugin><artifactId>maven-surefire-plugin</artifactId><version>2.19.1</version><configuration><skipTests>false</skipTests><!--排除不参与测试的内容--><excludes><exclude>**/BookServiceTest.java</exclude></excludes></configuration></plugin>
</plugins>

③maven指令

maven install -D skipTests

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

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

相关文章

【wiki】电竞助手掉落提醒 EsportsHelper「Webhook」「钉钉」「饭碗警告」「企业微信」「Discord」

介绍 本项目链接 Github电竞助手链接 github上项目电竞助手(EsportsHelper)的掉落提醒配置教程,当有掉宝的时候会发送你信息提示. 至于这个脚本是怎么使用的简单说一下,就是通过自动观看英雄联盟直播 从而获取奖励(仅限直营服),有兴趣的可以去github上看readme,非常详细,支持…

stable-diffusion-webui启动No Python at ‘C:\xxx\xxx\python.exe‘

打开webui.bat 把 if not defined VENV_DIR (set "VENV_DIR%~dp0%venv") 中的%~dp0venv改成自己python的安装路径就行获取直接set值即可 如 set VENV_DIRD:\Users\xxx\AppData\Local\Programs\Python\Python310 另外就是直接运行webui-user.bat也可以 如果运行…

javaScript:数组检测

目录 一.前言 二.数组检测方法 1.every&#xff08;&#xff09; 2.some&#xff08;&#xff09; 3.filter&#xff08;&#xff09; 一.前言 数组检测是指在编程中对数组进行验证和检查的过程。数组检测可以涉及以下方面&#xff1a; 确定数组的存在&#xff1a;在使用数…

【Linux】进程通信篇Ⅱ:共享内存、消息队列、信号量

文章目录 一、共享内存1.1 一些接口1. shmget 函数&#xff1a;申请一个 system v 的共享内存块2. ftok 函数&#xff1a;设置唯一标识码3. shmctl 函数&#xff1a;控制 system v 的共享内存块&#xff08;可以删除、查看...&#xff09;4. shmat 函数&#xff1a;将进程与共享…

一种多策略下RabbitMQ的延时队列实现

1.为什么会用到延时队列? 场景: 最近在开发一款系统中遇到这样一个场景,A系统开通套餐需要把套餐信息以邮件的形式发送给相关工作人员,经过人工审核通过后,在B系统里面开通,A系统会调B系统套餐列表接口查询套餐是否开通成功,开通成功则从A系统去完成订单,假如超过设定时间未开…

韦东山-电子量产工具项目:显示单元

所有代码都已通过测试跑通&#xff0c;其中代码结构如下&#xff1a; 一、include文件夹 1.1 disp_manager.h #ifndef _DISP_MANAGER_H //防止头文件重复包含,只要右边的出现过&#xff0c;就不会再往下编译 #define _DISP_MANAGER_H //区域结构体 typedef struct DispBuff …

[element-ui] el-table表格合并 span-method

用rowIndex, columnIndex 找到要合并的开始单元格 return {rowspan: 1,colspan: 1 } 表示表格不变 return {rowspan: 2,colspan: 1 } 表示表格向下合并一个单元格 return {rowspan: 1,colspan: 2 } 表示表格向右合并一个单元格 return {rowspan: 0,colspan: 0 } 表示删除此单元…

leetcode810. 黑板异或游戏(博弈论 - java)

黑板异或游戏 lc 810 - 黑板异或游戏题目描述博弈论 动态规划 lc 810 - 黑板异或游戏 难度 - 困难 原题链接 - 黑板异或游戏 题目描述 黑板上写着一个非负整数数组 nums[i] 。 Alice 和 Bob 轮流从黑板上擦掉一个数字&#xff0c;Alice 先手。如果擦除一个数字后&#xff0c;剩…

谈谈网络协议的定义、组成和重要性

个人主页&#xff1a;insist--个人主页​​​​​​ 本文专栏&#xff1a;网络基础——带你走进网络世界 本专栏会持续更新网络基础知识&#xff0c;希望大家多多支持&#xff0c;让我们一起探索这个神奇而广阔的网络世界。 目录 一、网络协议的定义 二、网络协议的组成 1、…

出于网络安全考虑,印度启用本土操作系统”玛雅“取代Windows

据《印度教徒报》报道&#xff0c;印度将放弃微软系统&#xff0c;选择新的操作系统和端点检测与保护系统。 备受期待的 "玛雅操作系统 "将很快用于印度国防部的数字领域&#xff0c;而新的端点检测和保护系统 "Chakravyuh "也将一起面世。 不过&#xf…

C++--类型转换

1.什么是类型转换 在传统C语言中&#xff0c;由强制类型转换和隐式类型转换&#xff0c;隐式类型转换&#xff0c;编译器在在编译阶段自动处理&#xff0c;能转换则转换&#xff0c;强制类型转换由用户自己转换。 缺陷&#xff1a; 转换的可视性比较差&#xff0c;所有的转换形…

Go语言中关键字type的多重应用场景详解

当谈及Go语言中的关键字type时&#xff0c;我们通常会想到用于定义结构体和接口的常见用法。然而&#xff0c;"type"关键字实际上有许多其他用法&#xff0c;本文将对其中几种常见用法进行简要总结记录。 定义结构体和方法 在Go中&#xff0c;我们可以使用type来定…

运维监控学习笔记5

Linux的内存是虚拟内存&#xff0c;是物理内存和交换分区swap。 内存&#xff1a; 页&#xff1a;4K&#xff0c; 硬盘&#xff1a;块。 寻址&#xff1a; 空间&#xff1a;内存的合并。大页内存。 free命令&#xff1a; [rootvm1 ~]# free -htotal used fre…

javap获取Kotlin方法JNI方法签名

获取Kotlin方法签名和JAVA不一样的地方就是需要使用Kotlin 命令行编译器生成.class文件&#xff1a; 编写一个Kotlin类&#xff0c;添加JNI方法&#xff1a; class TestLib {external fun init(callBack: CallBack)interface CallBack{fun onData(count:Int,data:String)} }在…

cesium学习记录08-鼠标绘制多边形

上一篇学习了实体的一些基础知识&#xff0c;这一篇来学习鼠标绘制实体多边形的实现 一、方法一&#xff1a; 1&#xff0c;结果显示 贴地&#xff1a; 不贴地&#xff1a; 2&#xff0c;方法全部代码&#xff1a; 主方法&#xff1a; /*** 绘制多边形* param {Object} op…

华为OD机试 - 公共子串计算(Java 2023 B卷 100分)

目录 专栏导读一、题目描述二、输入描述三、输出描述四、解题思路五、Java算法源码六、效果展示 华为OD机试 2023B卷题库疯狂收录中&#xff0c;刷题点这里 专栏导读 本专栏收录于《华为OD机试&#xff08;JAVA&#xff09;真题&#xff08;A卷B卷&#xff09;》。 刷的越多&…

VictoriaMetrics部署及vmalert集成钉钉告警

1、部署VictoriaMetrics cd /usr/local wget https://github.com/VictoriaMetrics/VictoriaMetrics/releases/download/v1.65.0/victoria-metrics-amd64-v1.65.0.tar.gz mkdir victoria-metrics && tar -xvzf victoria-metrics-amd64-v1.65.0.tar.gz && \ mv …

论AI GPT跨境贸易架构及其应用

摘要 2023年初,我司启动了智慧化跨境贸易供应链一体化平台的建设工作。我在该项目中担任系统架构设计师的职务,主要负责设计平台系统架构和安全体系架构。该平台以移动信息化发展为契机,采用”平台+AI”的模式解决现有应用的集中移动化需求。平台整体的逻辑复杂,对系统的高…

react之Hooks的介绍、useState与useEffect副作用的使用

react之Hooks的介绍、useState与useEffect副作用的使用 一、Hooks的基本介绍二、useState的使用2.1 简单使用2.2 数组结构简化2.3 状态的读取和修改2.3 组件的更新过程 三、useEffect的使用3.1 副作用介绍3.2 基本使用3.3 依赖3.4 不要对依赖项撒谎3.5 依赖项可以是空数组3.6 清…

ZZULIOJ 1193: 单科成绩排序(结构体专题),Java

ZZULIOJ 1193: 单科成绩排序&#xff08;结构体专题&#xff09;&#xff0c;Java 题目描述 有一学生成绩表&#xff0c;包括学号、姓名、3门课程成绩。请按要求排序输出&#xff1a;若输入1&#xff0c;则按第1门课成绩降序输出成绩表&#xff0c;若输入为i&#xff08;1<…