Maven坐标与依赖

坐 标

Maven坐标为各种构件引入了秩序。每个构件都必须明确定义自己的坐标,Maven坐标是通过一些元素来定义的,元素为:groupId、artifactId、version、packaging、classifier。

groupId:定义当前Maven项目隶属的实际项目,与域名相对应。如百度地图项目:com.badu.map

artifactId:该元素定义实际项目中的一个Maven项目(模块),推荐做法是使用实际项目名称作为artifactId的前缀。

version:该元素定义Maven项目当前所处的版本。如果是在开发阶段使用快照(SNAPSHOT)方式。

pachaging:该元素定义Maven项目的打包方式。默认值jar.

classifier:该元素用来帮助定义构建输出的一些附属构件。

依 赖

依赖声明:

<project>
  ...

  <dependencies>
   <dependency>
    <groupId>...</groupId>
    <artifactId>...</artifactId>
    <version>...</version>
    <type>...</type>
    <scope>...</scope>
    <optional>...</optional>
    <exclusions>
     <exclusion>
      ...
     </exclusion>

     ...
    </exclusions>
   </dependency>
   ...

  </dependencies>
  ...
</project>

说明:1.groupId、artifactId、version为依赖的基本坐标。

         2.type:依赖类型,对应于项目坐标定义的packaging. 大部份情况下无需声明,基默认值为jar.

         3.scope:依赖范围,见A

         4.optional:标记依赖是否可选(如果构件A依赖于构件B,构件B依赖构件C为可选,则A不会传递依赖C)。

         5.exclusions:用来排除传递性依赖。

大部份情况下声明只包含基本坐标。

A、依赖范围说明:

compile:编译依赖范围(为默认依赖范围)。对于编译、测试和运行都有效;

test:测试依赖范围。只对测试classpath有效。如:JUnit;

provided:已提供依赖范围。对于编译和测试classpath有效,但在运行时无效。如果:servlet-api(运行时由于容器已提供,所以无需重复引入);

runtime:运行时依赖范围。对于测试和运行classpath有效,但编译主代码时无效。如:JDBC;

system:系统依赖范围。该依赖与三种classpath的关系和provided依赖范围完全一致。但必须通过systemPath元素显示地指定依赖文件的路径(systemPath元素可以引用环境变量,如:<systemPath>${java_home}/lib/rt.jar</systemPaht>)。此项目应该谨慎使用,因为它引用本地,Maven仓库之外的类库文件,可能造成构建的不可移植。

import(Maven2.0.9及以上):导入依赖范围。该依赖范围不会对三种classpath产生实际影响。

由于依赖具有传递性,可能出现一个Maven项目间接依赖某构件的不版本。Maven提供了两个依赖调解原则:

一、路径最近者优先;二、路径长度一样时,第一声明者优先。

此外,还可以在声明依赖时使用exclusions元素声明排除依赖。

猜你喜欢

转载自yang8820.iteye.com/blog/1697432