- pom.xml
- dependencyManagement
- classifier
- import scope、type pom
1.pom.xml解析:
2.dependencyManagement:
Maven 使用dependencyManagement 元素为多项目依赖提供了一种管理依赖版本号的方式。父项目中声明依赖的版本,则子项目就不用版本,只需引用就可,子项目也会自动加载父项目声明的版本jar。
- dependencyManagement 作为版本统一管理,避免多子项目引用的版本混乱。
- dependencyManagement 只是声明依赖的jar,不会真正加载到本地库。子项目需要引用jar还需声明(只是可省略版本号)
- 示例:
父pom.xml中:
<dependencyManagement>
<dependencies>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>5.1.2</version>
</dependency>
...
<dependencies>
</dependencyManagement>
子项目pom.xml: (不需要声明版本号了)
<dependencies>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
</dependency>
</dependencies>
3.classifier属性作用:
比如 JSON-lib ,我利用 sonatype的 jar 搜素引擎搜索发现,JSON-lib的jar提供了两个版本的SDK,如图:
这个时候就必须使用classifier属性指定了:
<dependency>
<groupId>net.sf.json-lib</groupId>
<artifactId>json-lib</artifactId>
<version>2.4</version>
<classifier>jdk15</classifier>
</dependency>
如果不定义classifier的话就maven就会报错说找不到 jar 文件。
4.import scope、type pom:
继承一个父模块,然后再引入相应的依赖
假如说,我不想继承,或者我想继承多个,怎么做?
我们知道Maven的继承和Java的继承一样,是无法实现多重继承的,如果10个、20个甚至更多模块继承自同一个模块,那么按照我们之前的做法,这个父模块的dependencyManagement会包含大量的依赖。如果你想把这些依赖分类以更清晰的管理,那就不可能了,import scope依赖能解决这个问题。
但是,问题也出现了:
单继承:maven的继承跟java一样,单继承,也就是说子model中只能出现一个parent标签;
parent模块中,dependencyManagement中预定义太多的依赖,造成pom文件过长,而且很乱;
如何让这些依赖可以分类并清晰的管理?
问题解决:import scope依赖
如何使用:
1、maven2.9以上版本
2、将dependency分类,每一类建立单独的pom文件
3、在需要使用到这些依赖的子model中,使用dependencyManagement管理依赖,并import scope依赖
3、注意:scope=import只能用在dependencyManagement里面,且仅用于type=pom的dependency
<dependencyManagement>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-dependencies</artifactId>
<!-- 重要:版本号要和父模块中预定义的spring boot版本号保持一致 -->
<version>${spring.boot.version}</version>
<type>pom</type>
<scope>import</scope>
</dependency>
</dependencies>
</dependencyManagement>
注意:import scope只能用在dependencyManagement里面