Maven核心概念之依赖,聚合与继承
来源:互联网 发布:曼联92黄金一代 知乎 编辑:程序博客网 时间:2024/06/01 08:04
宏观图
一、依赖
我们项目中依赖的jar包可以通过依赖的方式(dependencies元素下添加dependency子元素)引入。
<dependency> <groupId>junit</groupId> <artifactId>junit</artifactId> <version>4.10</version> </dependency>
1.依赖范围
通过控制依赖的范围,可以指定该依赖在什么阶段有效。
<dependency> <groupId>junit</groupId> <artifactId>junit</artifactId> <version>4.10</version> <scope>test</scope> </dependency>
maven的几种依赖范围(<scope></scope>)
名称
有效范围
Compile
编译,测试,运行。默认的依赖范围
Test
测试,如Junit
Runtime
运行,如JDBC
Provided
编译,测试,如ServletAPI
System
编译,侧四,依赖于系统变量
2.依赖具有传递性
2.1依赖传递的规则
规则-级别一样,就先用第一个,级别不一样,就用级别最少的
解释:级别(依赖的层次)一样的,就按照顺序,依赖第一个(层次为0);如果出现层次(层次>0),就先依赖层次最少的;
2.2去除依赖的两种方式
选择性依赖
在依赖中用<optional>直接去除这种依赖传递的特性,也就是说,如果别的项目引用设置了此依赖的项目,这个commons-longging不会被依赖到。例如在项目A中配置commons-logging的依赖,如果项目B依赖项目A,那么,此时项目B中不会依赖commons-logging了。
<!-- 排除依赖 --> <dependency> <groupId>commons-logging</groupId> <artifactId>commons-logging</artifactId> <version>1.1.1</version> <optional>true<optional> </dependency>
排除依赖
如果第三方的jar包没有用<optional>去除依赖的传递性,那么我们可以在当前的项目中使用<exclusion>元素声明排除依赖。例如,项目A中配置了spring-core的依赖,如果项目B需要引用项目A,但是同时又不需要commons-logging的包,这个时候使用<exclusion>元素排除即可,这种用法可以刻解决包版本冲突的问题。
<!-- 排除依赖 --> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-core</artifactId> <exclusions> <exclusion> <groupId>commons-logging</groupId> <artifactId>commons-logging</artifactId> </exclusion> </exclusions></dependency>
二、聚合
一个项目往往由多个模块构成的,在进行构建时,针对每个模块都进行构建命令是一件非常繁琐又容易出错的事情,所以Maven的聚合功能能够替我们完成进行一次构建命令完成全部模块的构建。
Maven的聚合功能可以通过一个父模块将所有的要构建模块整合起来,将父模块的打包类型声明为POM,通过<modules>将各模块集中到父POM中。
<!-- 把这三个模块聚合在一起, <module></module> 中间的内容为子模块工程名的相对路径 --> <modules> <module>../user-core</module> <module>../user-log</module> <module>../user-service</module> </modules>
原理:父类型的模块,不需要有源代码和资源文件,也就是说,没有 src/main/java 和 src/test/java 目录。Maven会首先解析聚合模块的 POM 文件,分析要构建的模块,并通过各模块的依赖关系计算出模块的执行顺序,根据这个潜在的关系依次构建模块。
三、继承
Maven中继承的概念与面向对象的继承概念是一致的,通过继承消除重复编码的行为。在这里,我们也可以用一个父模块来完成父模块与子模块共用依赖的继承关系。父模块
父模块的POM文件声明与平常一样,提取公共地方,子模块需要继承父模块。
<!--继承user-parent的父模块--><parent> <groupId>com.tgb.bobo</groupId> <artifactId>user-parent</artifactId> <version>0.0.1-SNAPSHOT</version> <!-- 继承的绝对路径是pom文件 --> <relativePath>../user-parent/pom.xml</relativePath> </parent> <!--本模块的声明--> <artifactId>user-service</artifactId> <packaging>jar</packaging>
并不是所有的POM元素都可以被继承,如图表3是一个可继承的元素列表:
聚合和继承存在一些共性和潜在的联系,在实际应用中,经常将聚合模块的父模块和继承的父模块定义为同一个。
- Maven核心概念之依赖,聚合与继承
- Maven核心概念之依赖,聚合与继承
- Maven依赖继承与聚合
- maven之继承、聚合、依赖
- maven之继承、聚合、依赖
- Maven之依赖,聚合和继承
- maven之聚合与继承
- Maven之继承与聚合
- maven依赖,聚合和继承
- maven的pom.xml之聚合、继承、依赖
- Maven的使用《二》之依赖、继承、聚合
- Maven详解之聚合与继承
- Maven之——聚合与继承
- [150826]Maven详解之聚合与继承
- Maven详解之聚合与继承
- Maven详解之聚合与继承
- Maven详解之聚合与继承
- Maven详解之聚合与继承
- 心中的激动与兴奋交加,阿里内推面试
- UITableViewRowAction的使用
- 比较炫丽的幻灯片
- FastJson和Gson解析json的小例子
- 深度学习-CNN入门
- Maven核心概念之依赖,聚合与继承
- AJAX的工作原理
- HDU 1150 Machine Schedule(最小点覆盖)
- 修复Xcode升级错误 — PCH File Error
- Git教程1——概论
- Cocos2d-x中,onEnter与init的区别
- 【转载】初学makefile
- Cocos2d-x事件分发机制学习笔记
- Unique Binary Search Trees