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文件中

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

不同点

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

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

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

MySQL基础(三)-学习笔记

一.innodb引擎&#xff1a; 1). 表空间&#xff1a;表空间是InnoDB存储引擎逻辑结构的最高层&#xff0c;启用了参数 innodb_file_per_table(在 8.0版本中默认开启) &#xff0c;则每张表都会有一个表空间&#xff08;xxx.ibd&#xff09;&#xff0c;一个mysql实例可以对应多个…

Revisiting image pyramid structure for high resolution salient object detection

accv2022的技术&#xff0c;在我测评的数据集上确实要明显好于basnet&#xff0c;rembg等一众方法。 1.Introduction 使用LR数据集训练的方法通过调整输入尺寸可以在HR图像上产生不错的结果。本文主要关注仅使用LR数据集进行训练以产生高质量的HR预测。HR的有效感受野ERFs和LR…

QT学习日记 | 信号与槽

目录 前言 一、初始信号与槽 1、信号与槽的本质 2、信号与槽的使用 3、内置信号、内置槽函数与自定义信号、自定义槽函数 &#xff08;1&#xff09;文档查询 &#xff08;2&#xff09;自定义信号与内置槽函数的使用 4、信号与槽函数关联关系 5、带参数的信号与槽函数…

计算机毕业设计 | springboot 多功能商城 购物网站(附源码)

1&#xff0c; 概述 国家大力推进信息化建设的大背景下&#xff0c;城市网络基础设施和信息化应用水平得到了极大的提高和提高。特别是在经济发达的沿海地区&#xff0c;商业和服务业也比较发达&#xff0c;公众接受新事物的能力和消费水平也比较高。开展商贸流通产业的信息化…

Java和JavaScript的区别与联系

引言 Java是一种由Sun Microsystems&#xff08;现在是Oracle公司&#xff09;开发的面向对象编程语言&#xff0c;最初于1995年发布。Java被设计为一种跨平台的语言&#xff0c;可以在多个操作系统上运行&#xff0c;这是其广泛应用的重要原因之一。Java具有丰富的标准库和第三…

常见分类网络的结构

VGG16 图片来自这里 MobilenetV3 small和large版本参数,图片来着这里 Resnet 图片来自这里

AutoDL使用conda运行pytorch、dgl

环境配置要是出现兼容问题还是挺繁琐的。所以这里记录下成功的配置情况。 conda create --name Test python3.9 # 构建一个虚拟环境 conda init bash && source /root/.bashrc # 更新bashrc中的环境变量 conda activate Test # 切换到该虚拟环境 pip install torch…

windows安装oracle之后怎么连接使用

目录 1.打开SQl Developer 2.选择JDK 3.登录 4.创建表空间,用户 安装oracle的详细教程 WINDOWS安装Oracle11.2.0.4-CSDN博客 1.打开SQl Developer 找到 SQl Developer 2.选择JDK 根据你安装的oracle版本,因为我的oracle是安装的32位的,所以这里jdk也要选择32位 选择到ja…

私募证券基金动态-23年12月报

成交量&#xff1a;12月日均7,696.93亿元 2023年12月A股两市日均成交7,696.93亿元&#xff0c;环比下降12.39%、同比下降2.26%。12月整体21个交易日&#xff0c;无单日交易日成交金额过万亿&#xff0c;单日交易日最低成交金额为6,122.84亿元&#xff08;12月25日&#xff09;…

【Linux】进程通信——共享内存+消息队列+信号量

欢迎来到Cefler的博客&#x1f601; &#x1f54c;博客主页&#xff1a;折纸花满衣 &#x1f3e0;个人专栏&#xff1a;题目解析 &#x1f30e;推荐文章&#xff1a;【LeetCode】winter vacation training 目录 &#x1f449;&#x1f3fb;共享内存&#x1f449;&#x1f3fb;关…

测试用例的设计(超详细)

&#x1f345; 视频学习&#xff1a;文末有免费的配套视频可观看 &#x1f345; 关注公众号&#xff1a;互联网杂货铺&#xff0c;回复1 &#xff0c;免费获取软件测试全套资料&#xff0c;资料在手&#xff0c;薪资嘎嘎涨 1. 测试用例的概念 软件测试人员向被测试系统提供的一…

MySQL窗口函数--lead()函数

lead()函数&#xff1a; 查询当前行向下偏移n行对应的结果 该函数有三个参数&#xff1a;第一个为待查询的参数列名&#xff0c;第二个为向下偏移的位数&#xff0c;第三个参数为超出最下面边界的默认值。 如下代码&#xff1a; 查询向下偏移 2 位的年龄 SELECT user_id,user…

学习Android的第一天

目录 什么是 Android&#xff1f; Android 官网 Android 应用程序 Android 开发环境搭建 Android 平台架构 Android 应用程序组件 附件组件 Android 第一个程序 HelloWorld 什么是 Android&#xff1f; Android&#xff08;发音为[ˈnˌdrɔɪd]&#xff0c;非官方中文…

Linux 驱动开发基础知识——总线设备驱动模型(八)

个人名片&#xff1a; &#x1f981;作者简介&#xff1a;学生 &#x1f42f;个人主页&#xff1a;妄北y &#x1f427;个人QQ&#xff1a;2061314755 &#x1f43b;个人邮箱&#xff1a;2061314755qq.com &#x1f989;个人WeChat&#xff1a;Vir2021GKBS &#x1f43c;本文由…

SAP SD出库单部分开票后无法继续开票

SAP SD出库单部分开票后无法继续开票。 凭证 80051268 没有包含任何带有未清数量的项目 消息编号 VF171 诊断 凭证80051268不包含可以转换到开票类型中的项目。 系统响应 系统拒绝任何后续处理。 步骤 请检查选择的销售和分销凭证。 除了修改VBUP的相关字段&#xff0c;还有…

服务器未启动而端口进程仍在运行如何查看并杀死

首先登录服务器然后查看当前监听的端口&#xff1a; sudo netstat -tuln比如这里的8080&#xff0c;我们此时并未启动服务器&#xff0c;但是它却正在运行&#xff0c;这会导致服务器刚启动就秒挂。如果没有日志的话会让人有点疑惑&#xff0c;这种情况可能是之前运行了该进程…

外汇天眼:SIX推出了新的SIX参考利率加密货币和SIX实时加密货币指数

全球金融信息提供商SIX今天宣布推出新的SIX参考利率加密货币和SIX实时加密货币指数。新的SIX参考利率加密货币指数和SIX实时加密货币指数涵盖了主要的加密资产比特币&#xff08;BTC&#xff09;和以太坊&#xff08;ETH&#xff09;&#xff0c;为市场及其表现提供了全面的快照…

C/C++ - 函数模板

目录 函数模板基础 函数模板定义 函数模板实例 函数模板调用 函数模板本质 模板函数特化 模板参数限定 默认模板参数 多个模板参数 非类型模板参数 函数模板拓展 模板参数匹配规则 函数模板基础 函数模板定义 使用 template <typename T>​​​​​ 或 templ…

python如何实现异步并发

下面是一个示例代码&#xff0c;展示了如何设计一个异步线程池&#xff0c;并实现线程池满了就等待&#xff0c;空了就继续扔的功能&#xff1a; import concurrent.futures import time # 创建一个线程池 thread_pool concurrent.futures.ThreadPoolExecutor(max_workers8) …

【Java】实现图书管理系统

文章目录 1. 设计背景2. 需求分析3. 设计思路4. 实现4.1 book包4.1.1 Book类4.1.2 BookList类(书架) 4.2 user包4.2.1 User 类4.2.2 AdminUser类&#xff08;管理员用户&#xff09;4.2.3 NormalUser类&#xff08;普通用户&#xff09; 4.3 operation包4.3.1 IOPeration接口4.…