Maven - Maven3实战学习笔记(2)坐标和依赖

1、maven坐标元素

  maven坐标元素包括:groupId、artifactId、version、packaging、classifier。

  classifier:定义输出的附属构件。groupId、artifactId、version是pom.xml中必须定义的,packaging是可选的,classifier是不能直接定义的。

2、dependency中的元素

<dependencies>
    <dependency>
      <groupId>...</groupId>
      <artifactId>...</artifactId>
      <version>...</version>
      <type>...</type>
      <scope>...</scope>
      <optional>...</optional>
      <exclusions>
         <exclusion>...</exclusion>
      </exclusions>
    </dependency>
</dependencies>
说明:
  type:依赖的类型,对应项目坐标定义的packaging。
  scope:依赖的范围。
  optional:标记依赖是否可选。
  exclusions:用来排除传递性依赖。

  classpath类型:编译时classpath、测试时classpath、运行时classpath。

3、scope依赖范围:compile、test、provided、runtime、system、import

  1》compile:编译依赖范围。默认的依赖范围。对编译、测试、运行的classpath都有效。

  2》test:测试依赖范围。只对测试classpath有效,编译主代码、运行项目的使用时无法使用此类依赖。编译测试代码、运行测试的时候可以使用。

  3》procided:已提供依赖范围。对于编译和测试classpath有效,但在运行时无效。举例servlet-api,编译和测试项目的时候需要该依赖,但在运行项目的时候,由于容器已经提供,就不需要maven重复的引入一遍。

  4》runtime:运行时依赖范围。对于测试和运行有效,但在编译主代码时无效。举例jdbc驱动,项目主代码编译只需要jdk提供的jdbc接口,只有在执行测试或者运行项目的时候才需要实现上述接口的具体jdbc驱动。

  5》system:系统依赖范围。该依赖与3种classpath的关系,和provided依赖范围完全一致。但是,使用system的依赖时必须通过systempath元素显式的指定依赖文件的路径。由于此类依赖不是通过maven仓库解析的,而且往往与本机系统绑定,可能造成构建的不可移植性。systempath元素可以引用环境变量,如:

<dependencies>
    <dependency>
      ...
      <scope>system</scope>
      <systemPath>{java.home}/lib/rt.jar</systemPath>
      ...
    </dependency>
</dependencies>

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

4、传递性依赖

  传递性依赖:A包依赖于B包,B包又依赖于C包,通过手工管理jar包的引入,将会在jar下载的过程当中下了很多冗余的jar包。

猜你喜欢

转载自www.cnblogs.com/ZeroMZ/p/11520971.html