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.hqwc.cn/news/65696.html

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

相关文章

《雷达像智能识别对抗研究进展》阅读记录

&#xff08;1&#xff09;引言 ​ 神经网络通常存在鲁棒性缺陷&#xff0c;易受到对抗攻击的威胁。攻击者可以隐蔽的诱导雷达智能目标识别做出错误预测&#xff0c;如&#xff1a; ​ a图是自行车&#xff0c;加上对抗扰动后神经网络就会将其识别为挖掘机。 &#xff08;2&a…

Linux 文件编辑命令

一、三种模式介绍 命令模式 插入模式(编辑模式) 末行模式 二、模式切换 1.命令模式切换到插入模式 &#xff08;1&#xff09; a //进入到当前光标后开始编辑 &#xff08;2&#xff09; A //进入到当前光标所在行的行末开始编辑 &#xff08;3&#xff09;i //进入当前光…

【Java】一只小菜坤的编程题之旅【3】

文章目录 1丶判定是否互为字符重排2、杨辉三角3丶某公司的1个面试题&#xff08;字符串包含问题&#xff09; 1丶判定是否互为字符重排 这个题我们用一个非常简单的思想就能实现&#xff0c;我们先将字符串转换为字符数组&#xff0c;然后对字符数组进行排序&#xff0c;然后再…

数据结构:栈的实现(C实现)

个人主页 &#xff1a; 个人主页 个人专栏 &#xff1a; 《数据结构》 《C语言》 文章目录 前言一、栈的实现思路1. 结构的定义2. 初始化栈(StackInit)3. 入栈(StackPush)4. 出栈(StackPop)5. 获取栈顶元素(StackTop)6. 检查栈是否为空(StackEmpty)7. 销毁栈(StackDestroy) 二、…

VUE3组件

组件基础 {#components-basics} 组件允许我们将 UI 划分为独立的、可重用的部分&#xff0c;并且可以对每个部分进行单独的思考。在实际应用中&#xff0c;组件常常被组织成层层嵌套的树状结构&#xff1a; 这和我们嵌套 HTML 元素的方式类似&#xff0c;Vue 实现了自己的组件…

webpack 热更新的实现原理

webpack 的热更新⼜称热替换&#xff08;Hot Module Replacement&#xff09;&#xff0c;缩写为HMR。这个机制可以做到不⽤刷新浏览器⽽将新变更的模块替换掉旧的模块。 原理&#xff1a; ⾸先要知道 server 端和 client 端都做了处理⼯作&#xff1a; 在 webpack 的 watch…

BANI时代下的项目管理:如何迎接挑战与机遇

BANI时代的介绍与特点 BANI时代的起源 BANI这个概念首次被提出是为了描述和理解我们所处的复杂、多变、不确定的时代。与VUCA&#xff08;Volatile, Uncertain, Complex, Ambiguous&#xff09;相比&#xff0c;BANI更加准确地捕捉了我们面临的现实挑战。VUCA重点关注外部环境…

学习篇之React Fiber概念及原理

什么是React Fibber&#xff1f; React Fiber 是 React 框架的一种底层架构&#xff0c;为了改进 React 的渲染引擎&#xff0c;使其更加高效、灵活和可扩展。 传统上&#xff0c;React 使用一种称为堆栈调和递归算法来处理虚拟 DOM 的更新&#xff0c;这种方法在大型应用或者…

macOS使用ffmpeg与QT进行音视频推拉流

1.先启动流服务器 ./mediamtx 2.开始推流: ffmpeg -re -stream_loop -1 -i /Users/hackerx/Desktop/test.mp4 -c copy -rtsp_transport tcp -f rtsp rtsp://127.0.0.1:8554/stream 3. 安装ffmpeg 4.4 brew install ffmpeg4 4.添加ffmpeg头文件目录与库目录 5.链接ffmpeg相关库…

使用QT纯代码创建(查找)对话框详细步骤与代码

一、创建项目文件 打开Qt Creator->文件->新建文件或项目->选择Qt Widgets Application 为项目起名字 输入类的名字 二、 了解每个文件的作用 项目创建完毕之后就会出现以下几个文件&#xff0c;先来分别介绍以下这些文件的作用。 Headers->finddialog.h——很显…

如何通过CSS选择器选择一个元素的子元素?如何选择第一个子元素和最后一个子元素?

聚沙成塔每天进步一点点 ⭐ 专栏简介⭐ 选择一个元素的子元素⭐ 选择第一个子元素和最后一个子元素⭐ 注意事项⭐ 写在最后 ⭐ 专栏简介 前端入门之旅&#xff1a;探索Web开发的奇妙世界 记得点击上方或者右侧链接订阅本专栏哦 几何带你启航前端之旅 欢迎来到前端入门之旅&…

0基础学习VR全景平台篇 第81篇:全景相机-临云镜如何直播推流

临云镜全景相机是阿里巴巴定制全景设备&#xff0c;实现空间三维信息的快速采集&#xff0c;与阿里云三维空间重建平台搭配&#xff0c;帮助品牌商与平台以较低的成本完成空间的快速采集&#xff0c;并支持对室内/室外空间的三维全景展示及空间漫游&#xff0c;同时支持VR浏览、…