IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> Java知识库 -> Maven-进阶 -> 正文阅读

[Java知识库]Maven-进阶

1 Maven依赖范围

1.1 依赖配置

<project>
  ...
	<dependencies>
    <denpendcy>
      <groupId></groupId>
      <artifactId></artifactId>
      <version></version>
      <type></type>
      <scope></scope>
      <optional></optional>
      <exclusions>
        <exclusion>
        	...
        </exclusion>
      </exclusions>
    </denpendcy>
  </dependencies>
</project>

在pom.xml文件中,根元素project下的dependencies标签中可以包含一个或者多个dependency元素,以声明一个或者多个项目依赖。每个依赖dependency标签中都应该包含以下元素。

groupId: 依赖组id,可以理解为java的包名,一般用域名倒写
artifactId: 可以理解为项目名或者依赖名
version:依赖的版本
type:依赖的类型,对应项目坐标定义的packaging,大部分情况下,该属性不必声明,其默认值为jar
scope:依赖的范围,这个对应的属性就比较多了,后续会做详细介绍
optional:标记依赖是否可选
exclusions:用来排除依赖的传递性,其中可以配置多个exclusion属性,每个标签对应着groupId、artifactId、version等三个基本属性

很多时候,大部分依赖声明只包含groupId、artifactId和version这三个指定基本坐标的元素;而在一些特殊情况下,其它元素至关重要,也就是上面提到的scope、optional和exclusions。

1.2 依赖范围概念

maven在编译项目主代码的时候需要使用一套classpath。举例来说:

img

所以,依赖范围就是用来控制依赖与这三种classpath(编译classpath、测试classpath、运行classpath)的关系的。
依赖具体范围:scope(依赖范围)共有五种,它们分别是compile、provided、runtime、test、system。

img

2 pom依赖传递性

img

在maven中,依赖传递是可以传递的,假设存在三个项目,分别是项目A,项目B,项目C。假设C依赖B,B依赖A,那么根据maven项目依赖的特征不难推出项目C也依赖于项目A.通过上图也可以看出,在项目中直接依赖了spring-webmvc,而spring-webmvc依赖了Spring-aop,spring-beans等,也就是在项目中有依赖了spring-aop和spring-beans等等

img

3 依赖冲突解决

在实际的 Maven 项目开发中,由于项目引入的依赖过多,遇到 jar 冲突算是一个很常见的问题了

img

·标注一:Maven Project,Maven 项目选项;
·标注二:Dependencies,项目依赖;
·标注三:Show Dependencies,展示项目依赖图
点击Show Dependencies 按钮之后,接下来就会出现以下内容。

img

在我们发现jar包冲突之后,就可以通过exclusion进行冲突的解决

4 分模块构建项目

Maven多模块项目,适用于一些比较大的项目,通过合理的模块拆分,实现代码的复用,便于维护和管理。尤其是一些开源框架,也是采用多模块的方式,提供插件集成,用户可以根据需要配置指定的模块

4.1 创建一个父maven工程

  1. 新建一个maven项目,选择存储位置,并选择创建一个简单的maven工程
  2. 创建第一个模块
  3. 创建第二个模块
  4. 选择继承的父模块
  5. 创建聚合工程C

这种项目结构主要应用在大型项目中,多人协作开发,小型项目 或 人员配置不足情况下不建议使用; 之前因为一直没有机会参与大型项目开发,或是这种分布式项目的搭建,网上也没有这方面系统全面的说明 ,可能真正用到这种架构的不需要自己动手去弄,等着别人搭好进去码代码就可以了

5 聚合和继承

Maven的聚合特性可以帮助我们把项目的多个模块聚合在一起,使用一条命令进行构建,即一条命令实现构建多个项目;

Maven的继承特性可以将各个模块相同的依赖和插件配置提取出来,在简化POM的同时还可以促进各个模块配置的一致性

5.1 聚合

<modules>
        <module>spring1</module>
        <module>spring2</module>
        <module>spring3</module>
</modules>

在前面的学习中,我们见过打包方式为jar和war的,但是聚合模块的打包方式必须为pom,否则无法完成构建。

5.2 继承

<parent>
<groupId>com.baidu</groupId>
<artifactId>miliao-rootpom</artifactId> 
<version>2.0.3</version>
</parent>

可继承的POM元素如下:
·groupId:项目组ID,项目坐标的核心元素
·version:项目版本,项目坐标的核心因素
·distributionManagement:项目的部署配置
·dependencies:项目的依赖配置
·dependencyManagement:项目的依赖管理配置

5.3 聚合和继承的关系

虽然聚合模块和父模块经常合二为一,但是聚合和继承是两个不同的概念,其实是没有什么关系的。
聚合模块知道它聚合了哪些模块,但是被聚合的模块不知道聚合模块的存在;
继承父模块不知道子模块的存在,但是子模块都必须知道自己的父模块是谁。

  Java知识库 最新文章
计算距离春节还有多长时间
系统开发系列 之WebService(spring框架+ma
springBoot+Cache(自定义有效时间配置)
SpringBoot整合mybatis实现增删改查、分页查
spring教程
SpringBoot+Vue实现美食交流网站的设计与实
虚拟机内存结构以及虚拟机中销毁和新建对象
SpringMVC---原理
小李同学: Java如何按多个字段分组
打印票据--java
上一篇文章      下一篇文章      查看所有文章
加:2021-08-28 08:53:50  更:2021-08-28 08:54:01 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/23 13:22:28-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码