maven中的依赖

       本篇博客介绍maven中的依赖,这个词并不陌生在学习UML图时4大关系同包括依赖这一项。Maven中的依赖大概也是这个意思,是指项目对jar包的依赖。
       这种依赖是通过这个配置完成的,配置完毕后被依赖的jar本就会从本地仓库或私服或中央仓库被下载到项目中。下图为pom.xml的一般结构,其中“jar包引入”就是一个依赖,这个配置可以到 http://mvnrepository.com/中搜索自己想要引用的包,将GAV信息直接copy过来就可以完成引用。
 

依赖需要注意
       1、 配置依赖中的scope属性有四种选择
            test:测试范围,编译和打包不使用该依赖。

            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包了。




依赖继承

         当所做的项目比较大时会分为不同的模块,不同模块之间往往会依赖相同的jar包,如果引用的jar包版本不统一就会比较麻烦。Maven中的依赖继承就可以解决这个问题。类似面向对象中子类对父类方法属性的继承。


操作:

       首先建立父项目,在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>配置中的。
  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 8
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 8
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值