compile:编译范围,编译和打包使用,依赖传递。(默认项)
provided:编译和测试有效,生成war包时不会加入,如servlet-api在tomcat中存在runtime:运行时依赖,编译时不依赖
2、依赖传递冲突问题
解决一:
规则:
层次一样,依赖先引用的传递
层次不一样,依赖最短的传递示例一:(M表示模块)
Ma——>b1.0,Mc——>b2.0,Md——>Ma&Mc 如上:模块a依赖b的1.0版本,模块c依赖b的2.0版本,模块d同时依赖模块a和模块c 。如果d的pom中先 写了对模块a(c)的依赖则d就依赖b的1.0(2.0)版本。示例二:
Ma——>b1.0,Mc——>b2.0,Md——>Ma,Me——>Mc&Md
如上:不论先写c或d的那个依赖,e都依赖于b的2.0版本,因为这个传递路径短。
解决二:
依赖排除:如上的第一个示例,如果不希望d传递依赖b1.0就在d的pom.xml中依赖a的dependency下的中添 加exclusions进行排除。如下图:user-service中依赖user-log和user-dao,在log和dao模块中都用都log4j 这个jar的引用,在log的依赖中添加如下的配置后service就只会使用user-dao中的log4j的jar包了。
操作:
首先建立父项目,在eclipse中建立一个maven project,将Packaging的方法选为pom。 建立完毕项目我们只需要改动pom.xml配置文件。在这里可以将所有可能用到的jar包都配置起来,配置的格式如下,以下以一个引用为例: <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> <modelVersion>4.0.0</modelVersion> <!—本项目GAV的相关信息 --> <groupId>com.dmsd</groupId> <artifactId>dmsd-parent</artifactId> <version>0.0.1-SNAPSHOT</version> <packaging>pom</packaging> <!-- 集中定义依赖版本号 --> <properties> <junit.version>4.12</junit.version> </properties> <dependencyManagement> <!-- 单元测试 --> <dependency> <groupId>junit</groupId> <artifactId>junit</artifactId> <version>${junit.version}</version> <scope>test</scope> </dependency> </dependencyManagement> </project> 公共的父项目建立完毕后就可以建立子项目,同样还是建立maven project,不同的地方是需要配置Parent Project的信息: 项目建立完毕后首先打开子项目pom.xml配置文件看文件头,会发现添加了parent标签,这里配置的就是依赖的父项目的GAV信息,同时在子项目添加引用时如果是父项目中已经有的jar包这本项目中添加时不再需要申明版本,只需要什么groupId和artifactId,统一使用父项目中的版本。 <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> <modelVersion>4.0.0</modelVersion> <parent> <groupId>com.dmsd</groupId> <artifactId>dmsd-parent</artifactId> <version>0.0.1-SNAPSHOT</version> </parent> <groupId>com.dmsd</groupId> <artifactId>taotao-dmsd</artifactId> <version>0.0.1-SNAPSHOT</version> <!-- 添加依赖 --> <dependencies> <!-- 单元测试 --> <dependency> <groupId>junit</groupId> <artifactId>junit</artifactId> </dependency> </dependencies> </project> 依赖继承需要注意 1、选择性依赖继承 <dependencyManagement>:这个标签在父项目中添加依赖时使用,这样在子项目就不会继承父项目所有的依赖,而是需要在子相面中声明groupid和artifactid然后到父相面中寻找相应的jar包。 小结: 1、Maven使用配置完成项目对jar包的引用,这些依赖可以传递、可以被继承。 2、依赖的传递和依赖的继承在pom.xml中最直观的区别就是在继承中会出现<parent>标签,其中是父项目的信息。传递就是发生在一般的依赖<dependendy>配置中的。