MAVEN(1)

分模块开发与设计

分模块开发意义

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

步骤示例

这里以之前开发的SpringMVC_ssm中的domain模块为例

第一步、创建Maven模块

父项改为none,文件存储位置需要做出相应调整 

 第二步、书写代码模块

这里以Book为例

第三步、通过Maven指令安装到本地仓库(Install指令)

安装到本次仓库后就可以在需要引用该模块的模块中导入对应的坐标了

依赖管理

依赖指当前项目运行所需的jar包,一个项目可以设置多个依赖

依赖传递

依赖具有传递性

        直接依赖:在当前项目中通过以来配置建立的依赖关系

        间接依赖:被资源依赖的资源如果依赖其他资源,当前项目间接依赖其他资源

依赖传递冲突问题

路径优先:当依赖中出现相同的资源时,层积越深,优先级越低,层级越浅,优先级越高

声明优先:当资源在相同层级被依赖时,配置顺序靠前的覆盖配置顺序靠后的

特殊优先:当同级配置了相同资源的不同版本,后配置的覆盖先配置的

可选依赖与排除依赖

可选依赖

可选依赖指对外隐藏当前所依赖的资源--不透明

例如,我们在ssm中引用了maven_pojo的依赖,但我们不想向外界展示pojo,我们就可以通过在坐标内加入<optional>false</optional>标签将maven_pojo设置为可选依赖,对外界隐藏

    <dependency><groupId>com.cacb</groupId><artifactId>maven_pojo</artifactId><version>1.0-SNAPSHOT</version><optional>false</optional>></dependency>

排除依赖

排除依赖指主动断开依赖的资源,被排除的资源无需指定版本--不需要

例如,我们在另一个模块中导入了ssm的依赖坐标,但我们不需要pojo模块,就可以通过给ssm坐标增加<exclusions> <exclusion> </exclusion> </exclusions>标签来排除pojo依赖

<?xml version="1.0" encoding="UTF-8"?><project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"><modelVersion>4.0.0</modelVersion><groupId>com.cacb</groupId><artifactId>maven_others</artifactId><version>1.0-SNAPSHOT</version><packaging>war</packaging><dependencies><dependency><groupId>com.cacb</groupId><artifactId>maven_ssm</artifactId><version>1.0-SNAPSHOT</version></dependency></dependencies><exclusions><exclusion><groupId>com.cacb</groupId><artifactId>maven_pojo</artifactId></exclusion></exclusions></project>

继承与聚合

聚合

聚合:将多个模块组织成一个整体,同时进行项目构建的过程称为聚合

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

作用:使聚合工程可以将多个工程编组,,通过对聚合工程进行构建,实现对所有包含的模块进行同步构建

        当工程中某个模块发生更新(变更)时,必须保障工程中与已更新模块关联的模块同步更新,此时可以使用聚合工程来解决批量模块同步构建的问题

聚合工程示例

第一步、创建Maven模块,设置打包类型为pom
    <groupId>org.example</groupId><artifactId>maven_parent</artifactId><version>1.0-SNAPSHOT</version><packaging>pom</packaging>
第二步、设置当前聚合工程所包含的子模块名称 
    <modules><module>../maven_ssm</module><module>../maven_pojo</module></modules>

继承

概念:继承描述的是两个工程间的关系,与java中类的继承相似,子工程可以继承父工程中的配置信息,常见于依赖关系的继承

作用:

        简化配置

        减少版本冲突

示例

继承通常与聚合工程共同实现,所以依然使用上例中使用的maven_parent为例

第一步、创建Maven模块,设置打包类型为pom
    <groupId>org.example</groupId><artifactId>maven_parent</artifactId><version>1.0-SNAPSHOT</version><packaging>pom</packaging>
 第二步、在父工程的pom文件中配置依赖关系(子工程将沿用父工程中的依赖关系)

如,在本例中就是在maven_parent.xml中导坐标

    <dependencies><dependency><groupId>rog.springframework</groupId><artifactId>spring-webmvc</artifactId><version>5.2.10.RELREASE</version></dependency><!--   ...   --></dependencies>
第三步、在父工程中配置子工程中可选的依赖关系

例如,配置maven_pojo为可选依赖关系,就应该在maven_parent中进行如下书写

    <dependencyManagement><dependencies><dependency><groupId>com.cacb</groupId><artifactId>maven_pojo</artifactId><version>1.0-SNAPSHOT</version></dependency></dependencies></dependencyManagement>
 第四步、在子工程中配置当前工程所以继承的父工程
  <parent><groupId>org.example</groupId><artifactId>maven_parent</artifactId><version>1.0-SNAPSHOT</version><relativePath>../maven_parent/pom.xml</relativePath></parent>
 第五步、在子工程中配置使用父工程中可选依赖的坐标

例如,要在ssm中引用pojo依赖,就应该在ssmxml中进行如下书写

  </dependencies>    <dependency><groupId>com.cacb</groupId><artifactId>maven_pojo</artifactId></dependency></dependencies>

注 

子工程中使用父工程中的可选依赖时,仅需要提供群组id和项目id,无需提供版本,版本由父工程统一提供,避免版本冲突

子工程还可以定义父工程中没有定义的依赖关系

聚合与集成的区别

作用

        聚合用于快速构建项目

        继承用于快速配置

相同点

        聚合与集成的pomxml文件打包方式均为pom,可以将两种关系制作到同一个pom文件中

        聚合与继承均属于设计型模块,并无实际的模块内容

不同点

        聚合是在当前模块中配置关系,聚合可以感知到参与聚合的模块有哪些

        继承是在子模块中配置关系,夫模块无法感知那些子模块继承了自己

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

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

相关文章

Android App开发-简单控件(3)——常用布局

3.3 常用布局 本节介绍常见的几种布局用法&#xff0c;包括在某个方向上顺序排列的线性布局&#xff0c;参照其他视图的位置相对排列的相对布局&#xff0c;像表格那样分行分列显示的网格布局&#xff0c;CommonLayouts以及支持通过滑动操作拉出更多内容的滚动视图。 3.3.1 线…

flink源码分析 - 简单解析命令行参数

flink版本: flink-1.11.2 提取主类代码位置: org.apache.flink.api.java.utils.MultipleParameterTool#fromArgs 代码逻辑比较简单&#xff0c;此处不再赘述&#xff0c;在此记录方便后续使用 完整代码: /** Licensed to the Apache Software Foundation (ASF) under one* o…

浅聊 DNS 和 host

我们先来了解一下访问一个网站的基本流程 我们访问一个网站&#xff0c;自然就是访问网站的服务器&#xff0c;但是访问一个网站的服务器&#xff0c;自然要知道它的地址&#xff0c;服务器的地址就是一串数字&#xff0c;如 也就是我们说的 ip 地址&#xff0c;输入 i…

Redis的数据类型

目录 string 1.编码方式 2.应用场景 3.常用命令 hash 1.编码方式 2.应用场景 3.常用命令 list 1.编码方式 2.应用场景 3.常用命令 set 1.编码方式 2.应用场景 3.常用命令 zset 1.编码方式 2.应用场景 3.常用命令 如何理解Redis的编码方式 embs…

MySQL设计开发使用规范

数据库设计 库名 【强制】库的名称格式: 业务系统名称、业务系统名称子系统名。如: aimall , aimall_op【强制】创建数据库时必须显式指定字符集,并且字符集只能是是utf8或者utf8mb4【建议】库的名称必须控制在20个字符以内【强制】单实例表个数必须控制在2000个以内【强制】…

以太网交换基础VLAN原理与配置

目录 7.以太网交换基础 7.1.以太网协议 7.2.以太网帧介绍 7.3.以太网交换机 7.4.同网段数据通信全过程 8.VLAN原理与配置 8.1.VLAN的基本概念 8.2.VLAN的应用 7.以太网交换基础 7.1.以太网协议 以太网是当今现有局域网(Local Area Network,LAN)采用的最通用的通信协议…

Linux进程间通信方法和代码示例

Linux进程间通信&#xff08;IPC, Inter-Process Communication&#xff09;包括了多种不同的技术&#xff0c;例如管道&#xff08;pipe&#xff09;、信号&#xff08;signal&#xff09;、共享内存&#xff08;shared memory&#xff09;、消息队列&#xff08;message queu…

SpringBoot自定义全局异常处理器

文章目录 一、介绍二、实现1. 定义全局异常处理器2. 自定义异常类 三、使用四、疑问 一、介绍 Springboot框架提供两个注解帮助我们十分方便实现全局异常处理器以及自定义异常。 ControllerAdvice 或 RestControllerAdvice&#xff08;推荐&#xff09;ExceptionHandler 二、…

Python第 1 课 Python 介绍与安装

文章目录 第 1 课 Python 介绍与安装1.Python介绍1.1 面向对象概述1.2 Python 概述1.3 Python 特点 2.查看Python3.pyCharm 安装方法3.1 下载 pyCharm3.2 打开 pyCharm3.3 汉化 pyCharm3.4 pyCharm 的基本介绍和基本使用方法 第 1 课 Python 介绍与安装 1.Python介绍 1.1 面向…

Python爬虫库推荐

很多人学Python&#xff0c;都是从爬虫开始的&#xff0c;毕竟网上类似的资源很丰富&#xff0c;开源项目也非常多。 Python学习网络爬虫主要分3个大的版块&#xff1a; 抓取 &#xff0c; 分析 &#xff0c; 存储 当我们在浏览器中输入一个url后回车&#xff0c;后台会发生什…

消息中间件之八股面试回答篇:三、RabbitMQ如何解决消息堆积问题(100万条消息堆积)+RabbitMQ高可用性和强一致性机制+回答模板

RabbitMQ中的消息堆积问题 当生产者发送消息的速度超过了消费者处理消息的速度&#xff0c;就会导致队列中的消息堆积&#xff0c;直到队列存储消息达到上限。之后发送的消息就会成为死信&#xff0c;可能会被丢弃&#xff0c;这就是消息堆积问题。 解决消息堆积有三种种思路…

网络工程师必学知识:2、数据链路层-II型以太帧的封装

1.概述&#xff1a; 针对于链路层&#xff0c;华为官网IP报文格式大全里面包含了很多。如下图&#xff1a; 今天主要分析Ethernet II以太帧。 2.Frame Format&#xff1a; 12Byte&#xff08;inter frame gap&#xff09;|7B(同步码)|1B(定界符)|6B(DMAC)|6B(SMAC)|2B(Type)…

【Demo】基于CharacterController组件的角色控制

项目介绍 项目名称&#xff1a;Demo1 项目版本&#xff1a;1.0 游戏引擎&#xff1a;Unity2020.3.26f1c1 IDE&#xff1a;Visual Studio Code 关键词&#xff1a;Unity3D&#xff0c;CharacterController组件&#xff0c;角色控制&#xff0c;自定义按键&#xff0c;Scrip…

Rider 打开Unity项目 Project 全部显示 load failed

电脑自动更新&#xff0c;导致系统重启&#xff0c;第二天Rider打开Unity 工程&#xff0c;没有任何代码提示&#xff0c;字符串查找也失效。 现象&#xff1a; 1.所有的Project均显示laod failed。点击load failed。右侧信息显示Can not start process 2.选中解决方案进行Bui…

解决PyCharm的Terminal终端conda环境默认为base无法切换的问题

问题描述 在使用PyCharm的Terminal终端时&#xff0c;打开的默认环境为base。 在使用切换命令时&#xff0c;依旧无法解决。 解决方法 1、输入以下命令以查看conda的配置信息&#xff1a; conda config --show2、在输出中找到 auto_activate_base 的行&#xff0c;发现被…

IMX6ULL驱动学习——通过总线设备驱动模型点亮野火开发板小灯【参考韦东山老师教程】

参考&#xff1a;【IMX6ULL驱动开发学习】11.驱动设计之面向对象_分层思想&#xff08;学习设备树过渡部分&#xff09;-CSDN博客 韦东山课程&#xff1a;LED模板驱动程序的改造_总线设备驱动模型 我使用的开发板&#xff1a;野火imx6ull pro 欢迎大家一起讨论学习 实现了总线设…

uniapp 实现路由拦截,权限或者登录控制

背景&#xff1a; 项目需要判断token&#xff0c;即是否登录&#xff0c;登录之后权限 参考uni-app官方&#xff1a; 为了兼容其他端的跳转权限控制&#xff0c;uni-app并没有用vue router路由&#xff0c;而是内部实现一个类似此功能的钩子&#xff1a;拦截器&#xff0c;由…

数字图像处理(实践篇)三十三 OpenCV-Python从立体图像创建深度图实践

目录 一 方案 二 实践 双眼视觉是指人类使用两只眼睛同时观察同一场景,通过左右眼的视差来感知深度。左眼和右眼的视差是由于它们在空间中的位置不同而产生的,这种差异可以被大脑解读为物体的距离和深度。为了从立体图像构建深度图,找到两个图像之间的视差,可以初始化并创…

Java强训day7(选择题编程题)

选择题 public class Test01{private static int x 100;public static void main(String[] args) {Test01 hs1 new Test01();hs1.x;Test01 hs2 new Test01();hs2.x;hs1new Test01();hs1.x;Test01.x--;System.out.println("x"x);} }public class Test01{private …

倒排索引的构建与查询

倒排索引是信息检索的重要技术&#xff0c;本文将基于中文短信数据&#xff08;数据集可在本文所附资源处下载或点击此处链接下载&#xff09;&#xff0c;编程构建倒排索引并实现布尔查询。 1. 功能设计 用户输入查询&#xff0c;按下回车键&#xff0c;如果该查询作为单独的…