Maven的依赖

一、依赖管理

1、基本概念

当A jar包需要用到B jar包中的类时,我们就说A对B有依赖。例如:commons-fileupload-1.3.jar依赖于commons-io-2.0.1.jar。

通过第二个Maven工程我们已经看到,当前工程会到本地仓库中根据坐标查找它所依赖的jar包。

配置的基本形式是使用dependency标签指定目标jar包的坐标。例如:

<dependency>
    <!--坐标-->
    <groupId>junit</groupId>
    <artifactId>junit</artifactId>
    <version>4.0</version>
    <!--依赖的范围-->
    <scope>test</scope>
</dependency>
2、直接依赖和间接依赖

如果A依赖B,B依赖C,`那么A→B和B→C都是直接依赖,而A→C是间接依赖。

二、依赖范围

1、compile

[1]main目录下的Java代码****可以****访问这个范围的依赖

[2]test目录下的Java代码****可以****访问这个范围的依赖

[3]部署到Tomcat服务器上运行时********放在WEB-INF的lib目录下

例如:对Hello的依赖。主程序、测试程序和服务器运行时都需要用到。

2、test

[1]main目录下的Java代码****不能****访问这个范围的依赖

[2]test目录下的Java代码****可以****访问这个范围的依赖

[3]部署到Tomcat服务器上运行时****不会****放在WEB-INF的lib目录下

例如:对junit的依赖。仅仅是测试程序部分需要。

3、provided

[1]main目录下的Java代码****可以****访问这个范围的依赖

[2]test目录下的Java代码****可以****访问这个范围的依赖

[3]部署到Tomcat服务器上运行时****不会****放在WEB-INF的lib目录下

例如:servlet-api在服务器上运行时,Servlet容器会提供相关API,所以部署的时候不需要。

4、其他:runtime、import、system等。

各个依赖范围的作用可以概括为下图:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传在这里插入图片描述

三、依赖的传递性

当存在间接依赖的情况时,主工程对间接依赖的jar可以访问吗?这要看间接依赖的jar包引入时的依赖范围——只有依赖范围为compile时可以访问。例如:

Maven工程	   依赖范围	  对A的可见性
A	B	C	    compile	    √
   	D	        test	    ×
   	E	        provided	×

四、依赖的原则:解决jar包冲突

1、路径最短者优先

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传在这里插入图片描述

2、路径相同时先声明者优先

​ [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传在这里插入图片描述

这里“声明”的先后顺序指的是dependency标签配置的先后顺序。

五、依赖的排除

1、有的时候为了确保程序正确可以将有可能重复的间接依赖排除。请看如下的例子:

假设当前工程为MakeFriend,直接依赖OurFriends。

OurFriends依赖commons-logging的1.1.1对于MakeFriend来说是间接依赖。

当前工程MakeFriend直接依赖commons-logging的1.1.2

加入exclusions配置后可以在依赖OurFriends的时候排除版本为1.1.1的commons-logging的间 接依赖

<dependency>
    <groupId>com.atguigu.maven</groupId>
    <artifactId>OurFriends</artifactId>
    <version>1.0-SNAPSHOT</version>
    <!--依赖排除-->
    <exclusions>
        <exclusion>
            <groupId>commons-logging</groupId>
            <artifactId>commons-logging</artifactId>
        </exclusion>
    </exclusions>
</dependency>

<dependency>
    <groupId>commons-logging</groupId>
    <artifactId>commons-logging</artifactId>
    <version>1.1.2</version>
</dependency>
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值