学习目标:
<dependency>
<!--设置依赖范围-->
<scope>xxx<scope>
</dependency>
默认的依赖范围是compile
假设两个项目A,B
A依赖log4j-1.2.17(直接依赖)
B依赖log4j-1.2.9(直接依赖)
C依赖B,A,且C显示依赖log4j-1.2.9(间接依赖)
级别相同,先声明的先依赖
A->dbunit-2.2->commons-logging-1.0.4
B->commons-logging-1.1.1
C 依赖A,B
依赖级别不相同,则依赖层数最小的,此例中C依赖commons-logging-1.1.1
依赖的传递,主要针对compile作用域传递,test范围不会被传递
如果不想使用某个版本的依赖
可以使用
<!-- maven-ch04依赖MySQL 5.1.37 maven-ch05依赖MySQL 5.1.35 -->
<dependencies>
<dependency>
<groupId>org.learning.maven</groupId>
<artifactId>maven-ch04</artifactId>
<version>0.0.1-SNAPSHOT</version>
<!--如果没有下述代码,则maven-ch06将依赖MySQL 5.1.37-->
<exclusions>
<exclusion>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
</exclusion>
</exclusions>
</dependency>
<!--maven-ch06将依赖MySQL 5.1.35-->
<dependency>
<groupId>org.learning.maven</groupId>
<artifactId>maven-ch05</artifactId>
<version>0.0.1-SNAPSHOT</version>
</dependency>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.11</version>
</dependency>
</dependencies>
分模块管理项目,带来的最大问题就是需要将模块一个个依次编译,所以引入了聚合概念。
所谓的聚合就是在多个模块的根目录中创建一个pom.xml文件集中编译项目模块(将多个pom.xml文件聚合到一起)。
在eclipse中可以创建一个简单项目(跳过archetype创建),并且在package中选择pom(管理类型),这个简单项目中只需要编写pom.xml
在这个聚合pom.xml中添加
<modules>
<module>文件所在位置(可以使用“..”这样的相对路径)</module>
...
</modules>
这个并不会改变目录结构,依然跟依次maven其他项目的结果一样。这样的好处就是可以一次性的操作多个模块
每个项目都有一个pom.xml文件,而这些文件可能存在一些冗余信息,即这些文件存在一些共同的信息,如常量,常用的依赖包
所以就有了继承,所谓的继承就是将多个pom.xml文件中的相同信息聚合到一个文件(跟聚合类似了)
创建的过程与聚合类似,创建一个简单的项目(package 为 pom),只包含一个pom.xml文件
将多个项目中pom.xml一样的都拷贝到在本pom.xml文件
对于依赖的继承,需要使用<dependencyManager></dependencyManager>
<dependencyManagement>
<dependencies>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.11</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>5.1.37</version>
</dependency>
</dependencies>
</dependencyManagement>
不仅减少了代码的编写,而且也避免了依赖包版本冲突问题
通过上述的藐视,可以发现继承和聚合很类似,所以可以将<modules></modules>
添加到继承的pom.xml文件中
如:
<modules>
<!--模块的位置-->
<module>../maven-ch04</module>
<module>../maven-ch05</module>
<module>../maven-ch06</module>
</modules>
其他项目继承这个pom.xml文件时使用:
<parent>
<groupId>org.learning.maven</groupId>
<artifactId>maven-parent</artifactId>
<version>0.0.1-SNAPSHOT</version>
<!-- 继承的pom.xml文件的相对路径 -->
<relativePath>../maven-parent/pom.xml</relativePath>
</parent>