maven的依赖传递(二)


一、jar包的作用域(包的依赖):scope

pom.xml:

<dependency>
<groupId>org.zzz</groupId>
<artifactId>xx</artifactId>
<version>1.0</version>
<scope></scope>
</dependency>

1.test : 测试时会使用到该jar包,编译和打包时不会使用该jar包。

2.compile:编译范围有效,编译和打包时都会使用该jar包

3.provided:在编译和测试的过程使用该jar包,打包的时候不会用到该jar包

4.runtime在运行和测试的时候使用该jar包,编译的时候不使用该jar包


默认的是compile



二、jar包的传递(test作用域的jar包不会传递)

(1)当依赖级别相同的时候,先用哪个项目,就依赖对应的包

假设A项目有xx.1.0.jar

A_pom.xml:

<dependency>
<groupId>org.zzz</groupId>
<artifactId>xx</artifactId>
<version>1.0</version>
</dependency>

B项目有xx.2.0.jar

B_pom.xml:

<dependency>
<groupId>org.zzz</groupId>
<artifactId>xx</artifactId>
<version>2.0</version>
</dependency>

C项目依赖A,B。

C_pom.xml:

<dependency>
<groupId>com.carlo</groupId>
<artifactId>A</artifactId>
<version>0.0.1</version>
</dependency>
<dependency>
<groupId>com.carlo</groupId>
<artifactId>B</artifactId>
<version>0.0.1</version>
</dependency>

此时C中应该是哪个xx包??

解析:A与xx.1.0.jar是直接依赖,B与xx.2.0.jar也是直接依赖,C与xx.jar是间接依赖。

这种情况下,先声明了哪个依赖,就用哪个依赖对应的jar包。

所以此时在C项目里先定义依赖A,故C中使用的是xx.1.0.jar包。


(2)当依赖级别不同的时候,使用依赖级别较短的那个包

假设A项目有aa.2.0.jar,aa.2.0.jar里包含有bb.0.1.jar

A_pom.xml:

<dependency>
<groupId>org.zzz</groupId>
<artifactId>aa</artifactId>
<version>2.0</version>
</dependency>

B项目有bb.2.1.jar

B_pom.xml:

<dependency>
<groupId>org.zzz</groupId>
<artifactId>bb</artifactId>
<version>2.1</version>
</dependency>

C项目依赖A,B,

C_pom.xml:

</pre><pre name="code" class="html"><dependency>
<groupId>com.carlo</groupId>
<artifactId>A</artifactId>
<version>0.0.1</version>
</dependency>
<dependency>
<groupId>com.carlo</groupId>
<artifactId>B</artifactId>
<version>0.0.1</version>
</dependency>

此时C中依赖哪个bb的jar包?
这种情况下,用依赖级别较短的那个jar包。即A对bb包的依赖有2级,而B对bb包的依赖只有一级。
所以在C项目中,会使用B项目中的bb.2.1.jar
如果我们不想按照这种方式去传递包,而是想用某一个包,比如在上面的示例(2)中,我们想在C项目中使用A中的bb.0.1.jar。
此时可以exclusions标签来对B中的bb.2.1.jar包进行排除依赖:
C_pom.xml:

<dependency>
<groupId>com.carlo</groupId>
<artifactId>A</artifactId>
<version>0.0.1</version>
</dependency>
<dependency>
<groupId>com.carlo</groupId>
<artifactId>B</artifactId>
<version>0.0.1</version>
<!--排除依赖,不需要写version,因为每个项目都只依赖某一版本的某一个包,所以在配置排除依赖的时候,不需要加上版本号了-->
<exclusions>
<exclusion>
<groupId>org.zzz</groupId>
<artifactId>bb</artifactId>
</exclusion>
</exclusions>
</dependency>

经过上面的配置以后,C项目中使用的就是A中的bb.0.1.jar拉。


附加一些说明:

(1)mvn:compile  执行该命令等于把src中的代码进行编译,产生taget文件夹,编译到class

(2)mvn:test 执行该命令就把测试代码进行编译

(3)mvn:clean :清空target

(4)mvn:install:把项目打包到本地仓库

(5)mvn:package:把项目进行打包


关于groupId 、 artifactId 和 version

groupId:一般是公司网站逆序字符串,比如com.xxx、org.apache

artifactId:指某一个模块,比如core、service等

version:版本号,比如:0.0.1-SNAPSHOT

版本号的定义为:x.x.x-里程碑,第一个x表示大版本(大调整,架构上的变化),第二个x表示分支(大版本下的分支),第三个x表示分支里做了多少次更新;

里程碑有SNAPSHOT(正在开发中的版本),alpha(开发完后,内部的测试版本),beta(项目测试完没问题后定义该版本,可供使用人员下载下来用),

用了一段时间后没问题了就定义为Release(RC)版本,最后会生成一个可靠版本GA。

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值