Maven知识点扫盲(二)依赖管理
来源:互联网 发布:在家英文网络客服 编辑:程序博客网 时间:2024/06/06 08:49
DependencyManagement
引入
在多模块的项目中,如果在父pom中使用dependencies来管理依赖,那么在子模块中,无论是否需要父pom中的依赖,都会强制的继承过来,这样就不太有很好了。可以简单的理解为Java中的implements 无论是否需要,都要实现父类中的所有依赖的。而dependencyManagement不是这样的,只是提供了子模块中可能用到的一些依赖,不会强制子模块引入依赖,而这个就像是Java中的abstract Class,具体要不要实现父类中的依赖,完全由子模块来决定。
实例
父pom
<dependencyManagement> <dependencies> <dependency> <groupId>junit</groupId> <artifactid>junit</artifactId> <version>4.8.2</version> <scope>test</scope> </dependency> <dependency> <groupId>log4j</groupId> <artifactid>log4j</artifactId> <version>1.2.16</version> </dependency> </dependencies></dependencyManagement>
子模块Pom
<dependency> <groupId>junit</groupId> <artifactid>junit</artifactId> </dependency> <dependency> <groupId>log4j</groupId> <artifactid>log4j</artifactId> </dependency>
这样一来,就变得容易管理,使得各个子模块中的依赖的版本&scode是一样的,不存在出现重复依赖。|== 关键的地方是在父POM中的dependencyManagement标签中配置的依赖是不会主动引入到子项目中的、也就是说虽然在父POM中的dependencyManagement定义了junit的依赖、假如子类中没有关于junit的、那么子类就没有junit依赖的引入、并且假如子项目不想使用4.1版本的junit、还可以指定自己想要使用的junit版本、这样就完全覆盖了父POM中关于junit的定义、也就是说父POM中的junit定义与他无关。
更进一步
我们知道Maven的继承和Java的继承一样,是无法实现多重继承的,如果10个、20个甚至更多模块继承自同一个模块,那么按照我们之前的做法,这个父模块的dependencyManagement会包含大量的依赖。如果你想把这些依赖分类以更清晰的管理,那就不可能了,import scope依赖能解决这个问题。你可以把dependencyManagement放到单独的专门用来管理依赖的POM中,然后在需要使用依赖的模块中通过import scope依赖,就可以引入dependencyManagement。
依赖范围有一种是import、是只有在dependencyManagement元素下才有效果的、使用该范围的依赖通常指向一个POM、作用是将目标POM中的dependencyManagement配置导入并合并到当前POM的dependencyManagement元素中。
实例
A pom
<project> <modelVersion>4.0.0</modelVersion> <groupId>com.volshell.sample</groupId> <artifactId>A</artifactId> <packaging>pom</packaging> <version>1.0-SNAPSHOT</version> <dependencyManagement> <dependencies> <dependency> <groupId>junit</groupId> <artifactid>junit</artifactId> <version>4.8.2</version> <scope>test</scope> </dependency> <dependency> <groupId>log4j</groupId> <artifactid>log4j</artifactId> <version>1.2.16</version> </dependency> </dependencies> </dependencyManagement></project>
B pom
<dependencyManagement> <dependencies> <dependency> <groupId>com.volshell.sample</groupId> <artifactid>A</artifactId> <version>1.0-SNAPSHOT</version> <type>pom</type> <scope>import</scope> </dependency> </dependencies> </dependencyManagement> <dependency> <groupId>junit</groupId> <artifactid>junit</artifactId> </dependency> <dependency> <groupId>log4j</groupId> <artifactid>log4j</artifactId> </dependency>
- Maven知识点扫盲(二)依赖管理
- Maven知识点扫盲(一)
- maven项目管理总结(二)配置文件及依赖管理
- maven教程(四):maven依赖管理
- maven实战(二)maven的依赖
- eclipse中的maven管理之配置与依赖的查找和替换(二)
- Maven实战(五)-- 依赖管理
- Maven实战(五)-- 依赖管理
- maven依赖管理
- maven 项目依赖管理
- Maven的依赖管理
- maven 项目依赖管理
- Maven 依赖管理
- maven依赖管理
- maven 管理依赖
- Maven依赖管理
- maven 依赖管理
- Maven的依赖管理
- Python之subprocess模块的使用
- Struts(二)
- IoT通讯技术选型及模型设计的思考
- Android 开发EventBus简单使用
- SpringMVC学习-01天
- Maven知识点扫盲(二)依赖管理
- git初识
- 数据库建立存储过程的意义
- sdut-离散题目12
- 通信同步对发送接收处理
- 重载和重写的区别
- 希尔排序的实现
- 类成员中冒号初始化与花括号类赋值问题(未经应许,所以发网站收藏)
- 【爬虫】Python2爬虫代码之获取金融品种行情数据