Maven系列学习(3)-坐标和依赖

Maven拥有数量巨大的构件,对于每一个构件,需要唯一确定,所以Maven引入坐标的概念,坐标为构件引入秩序。

Maven坐标由以下元素确定,它们是groupId、artifactId、version、package及classifier。

<1>groupId:定义当前Maven项目所属实际项目;

<2>artifactId:定义实际项目中的一个模块(Module),默认使用实际项目名作为前缀。例如:spring-core、spring-context、spring-tx等;

<3>version:定义Maven项目当前所处的版本;

<4>package:定义Maven项目的打包方式;

<5>classifier:该元素定义构件输出的附属构件,例如:source、doc等;

其中,groupId、artifactId和version是必须定义的,package默认为jar,classifier是不能直接定义的,只能通过插件构建。


第一、依赖范围

<dependency>
    <groupId>junit</groupId>
    <artifactId>junit</artifactId>
    <version>4.11</version>
    <scope>test</scope>
 </dependency>

如上所示,scope定义依赖的范围。具体的依赖范围有以下几种:

<1>compile:编译依赖范围,默认的依赖范围;

<2>test:测试依赖范围,只对测试有效;

<3>provide:提供依赖范围,对编译和测试有效;

<4>runtime:运行依赖范围,对测试和运行有效;

<5>system:系统依赖范围,同compile。该依赖范围必须通过systemPath显式指出依赖文件路径;

我们对以上几种依赖范围,可以整理如下表格:

依赖范围编译测试运行例如
compileYYYspring
test-Y-jUnit
provideYY-servlet-api
runtime-YYJDBC驱动


第二、传递性依赖

所谓传递性依赖,就是A依赖B,B依赖C,那么A传递依赖C。如下图:

依赖范围也会影响传递性依赖,其中,竖列为第一依赖,横列为第二依赖,如下图:

 compiletestprovidedruntime
compilecompile--runtime
testtest--test
providedprovide-providedprovided
runtimeruntime--runtime


第三、依赖调解

Maven引入传递依赖后,可以简化和方便依赖声明,同时,为避免依赖造成问题,我们需要知道传递依赖是从哪条依赖路径引入的。我们有2条原则:

1、路径最近优先;

2、第一申明优先;


第四、排除依赖

有时候,我们引入传递依赖后,也可能带来一系列问题。例如:某项目引入第三方依赖,而第三方依赖又依赖于一个SNAPSHOT版本的类库。这时,就应该将此依赖SNAPSHOT版本的依赖去掉。使用exclusions可以去掉传递性依赖。如下:

<dependency>
    <groupId>org.springframework</groupId>
    <artifactId>spring-tx</artifactId>
    <version>3.2.4.RELEASE</version>
    <exclusions>
        <exclusion>
             <groupId>aopalliance</groupId>
             <artifactId>aopalliance</artifactId>
        </exclusion>
    </exclusions>
</dependency>

第五、依赖归类

有很多关于Spring Framework的依赖,他们来自于同一项目的不同模块,版本号却相同。这时,我们可以将版本号提取出来,放置于properties标签下,以后如果版本号变了,只需要修改一个地方就可以了。如下代码:

<properties>
  <springframework-version>3.2.4.RELEASE</springframework-version>
</properties>

<dependencies>
  <dependency>
    <groupId>org.springframework</groupId>
    <artifactId>spring-context</artifactId>
    <version>${springframework-version}</version>
  </dependency>
  <dependency>
    <groupId>org.springframework</groupId>
    <artifactId>spring-tx</artifactId>
    <version>${springframework-version}</version>
  </dependency>
</dependencies>


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值