首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 软件管理 > 软件架构设计 >

maven座标和依赖

2012-11-16 
maven坐标和依赖maven 坐标groupId :定义当前maven项目隶属的实际项目。首先,maven项目和实际项目不一定是

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 帮助分析当前项目的依赖。

?

热点排行