maven坐标和依赖


maven 坐标

groupId :定义当前maven项目隶属的实际项目。首先,maven项目和实际项目不一定是一对一的关系。

artifactId : 该元素定义实际项目中的第一个maven项目模块,推荐的做法是使用实际项目名称作为artifactid的前缀,作用在于方便寻找实际构件。

version  : 该元素定义maven项目当前所处的版本,其中SNAPSHOT为快照版本.

packaging : 该元素定义maven项目的打包方式。首先,打包方式通常与所生成构建的文件扩展名对应。可以支持jar和war的打包,莫非为jar方式。


classifier:该元素用来帮助定义构建输出一些附属构建。附属构建与主构建对应。如主构件是nexuc-indexer-2.0.0.ar,该项目可能还会通过使用一些插件生成

如nexus-indexer-2.0.0-javadoc.jar,nexus-indexer-2.0.0-sources.jar这样一些附属构件,其中包含了java的文档和源码。


maven中的一览范围就是用来控制依赖与这三种cleasspath(编译classpath,测试classpath,运行classpath)的关系,maven有一下几种依赖范围:


compile : 编译依赖范围。如果没有指定,就会默认使用该依赖范围。使用此依赖范围的Maven依赖,对于编译、测试、运行三种classpath都有效、典型的例子是spring-core,在编译、测试和运行的时候都需要使用该依赖。

test : 测试依赖范围。使用此依赖范围的Maven依赖,只对于测试classpath有效,在编译主代码或者运行项目的使用时将无法使用此类依赖。典型的例子是junit,它只是在编译测试代码及运行测试时候才需要。

provided : 已提供依赖范围。使用此依赖范围的maven依赖,对于编译和测试classpath有效,但是运行时无效。典型的例子是sevlet-api,编译和测试项目的时候需要该依赖,但是运行时项目的时候,由于容器已经提供,就不需要Maven重复地引入一遍。

runtime : 运行时依赖范围。使用此依赖范围的Mavne依赖,对于测试和运行classpath有效,但是在编译主代码时无效。典型的例子就是JDBC驱动实现,项目主代码的编译只需要JDK提供的JDBC接口,只有在执行测试或者运行项目的时候才需哟啊实现上述接口的具体JDBC驱动。

system : 系统依赖范围。该依赖与三种classpath的关系,和provided依赖范围完全一致。但是,使用system范围的依赖时必须通过systemPath元素显示地制定依赖文件的路径。

 由于此类依赖不是通过mavne仓库解析的,而且往往与本机系统绑定,可能造成构建的不可移植,因此应谨慎使用。systemPath元素可以引用环境变量 如:

   <dependency>
         <groupId>javax.sql</groupId>
          <artifactId>jdbc-stenxt</artifactId>
           <version>2.0</version>
           <scope>system</scope>
            <systemPath>${java.hoem}/lib/rt.java</systemPath>
   </denpendency>

import :  导入依赖范围。该依赖范围不会对三种classpath产生实际的影响。


maven中的传递性依赖

如果A依赖B B依赖C 我们可以说A对于B是第一直接依赖,B对于C是第二直接依赖,A对于C是传递依赖。其中第一直接依赖和第二直接依赖的范围决定了传递性依赖的范围。


依赖调解

    maven中的依赖调解我们注意:当项目A同时依赖X(1.0)和依赖(2.0)这两个jar包,那么maven会根据这两个依赖的路径进行判断。

    (1).路径最近者优先。

    (2).当依赖路径相同的情况下,那么第一声明者优先。


可选依赖是不会被传递。

 <dependency>
         <groupId>javax.sql</groupId>
          <artifactId>jdbc-stenxt</artifactId>
           <version>2.0</version>
            <optional>true</optional>
   </denpendency>


排除依赖  在申明exclusion的时候只需要groupId和artifactId无需指定版本。
 <dependency>
         <groupId>com.juvenxu.mvnbook</groupId>
          <artifactId>project-b</artifactId>
           <version>1.0.0</version>
         <exclusions>
             <exclusion>
                   <groupId>com.juvenxu.mybook</groupId>
                    <artifactId>project-c</artifactId>
             </exclusion>
         </exclusions>
</denpendency>

 <dependency>
         <groupId>>com.juvenxu.mybook</groupId>
          <artifactId>project-c</artifactId>
          <version>2.0</version> 
</denpendency>


归类依赖 可以使用美元符号和大括号环绕方式引用maven属性。

申明
<properties>
  <springframework.version>2.5.6</springframework.version>
</properties>

使用
 <dependency>
   <groupId>org.springframework</groupId>
    <artifactId>spring-core</artifactId>
     <version>${springframework.version}</version>
</dependency>

优化依赖

通过 mvn dependency : list 可以查看当前项目的已解析依赖。

     mvn dependency : tree 解析依赖树 。

     mvn analyze 帮助分析当前项目的依赖。

猜你喜欢

转载自liuwuhen.iteye.com/blog/1678379