您的位置:首页 > 其它

maven 坐标和依赖

2012-09-22 17:49 447 查看
maven坐标:
groupId 组Id
artifactId 模块Id或者子项目Id
version 版本号
packaging 打包方式
classifier该元素用来帮助定义构建输出的一些附属构件

依赖的配置:

<!--groupId artifactId version 依赖的基本坐标 type依赖的类型,默认为jar,scope 依赖的范围 optional 标记依赖是否可选 exclusions 用来排除传递性依赖-->

<dependency>

<groupId>com.alibaba.platform.shared</groupId>

<artifactId>webx3.core</artifactId>

<version>${webx3.version}</version>

</dependency>

依赖范围:scope

设置以来的范围就是用来控制依赖于三种classpath的关系(编译classpath,测试classpath,运行classpath)
maven有以下几种classpath:
compile :编译依赖范围,默认使用该依赖范围对编译,测试,运行三种classpath都有效
test: 测试依赖范围,使用此依赖范围,只对测试classpath有效,编译主代码和运行项目时无法使用此类依赖,典型例子就是junit
<!-- test -->

<dependency> <!--dependency 元素以声明项目的依赖,这里添加了一个依赖 -->

<groupId>com.alibaba.external</groupId>

<artifactId>test.junit</artifactId>

<version>${junit.version}</version>

<scope>test</scope> <!--scope表示依赖范围,若依赖范围为test则表示改以来只对测试有效,也就是说在测试代码中import JUnit是没有问题的,但是在主代码中引用就会造成编译错误,如不申明依赖范围,默认值为compile,对主代码和测试代码同时生效 -->

</dependency>

<dependency>

<groupId>com.alibaba.external</groupId>

<artifactId>test.junit.junit-all</artifactId>

<version>${junit.version}</version>

<scope>test</scope>

</dependency>

<dependency>

<groupId>com.alibaba.external</groupId>

<artifactId>test.easymockclassextension</artifactId>

<version>${easymock.version}</version>

<scope>test</scope>

</dependency>

<dependency>

<groupId>com.alibaba.external</groupId>

<artifactId>test.easymock</artifactId>

<version>${easymock.version}</version>

<scope>test</scope>

</dependency>

<dependency>

<groupId>com.alibaba.external</groupId>

<artifactId>test.mockito-all</artifactId>

<version>1.8.2</version>

<scope>test</scope>

</dependency>

<dependency>

<groupId>com.alifi.aliloan.common</groupId>

<artifactId>common.test</artifactId>

<version>${commons.version}</version>

<scope>test</scope>

</dependency>

provided 已提供依赖范围,对于编译和测试classpath有效,在运行时无效,例如servlet.api,由于容器已经能够提供就不需要重复引入

runtime:运行时依赖范围,对测试和运行classpath有效对于编译主代码是无效。例如jdbc驱动实现,项目主代码编译只需要提供的接口,只有在测试和执行的时候才需要实现具体的jdbc驱动

system系统依赖范围,许provided依赖范围一致。此类依赖不需要maven仓库解析,往往与本机系统绑定,可能造成构建不可移植。

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

传递性依赖:
A-B-C A对于B是第一直接依赖,B对于C是第二直接依赖,A对于C属于传递性依赖。
依赖范围:
当第二直接依赖的范围是compile时传递性依赖范围与第一直接依赖范围一致;当第二直接依赖范围是test依赖将不会传递。

依赖调解:
对于version不同,groupId和artifactId相同的两个依赖需要进行依赖调解,否则会造成依赖重复。
第一原则是:路径最近这有限。
第二原则:在依赖路径长度相等的前提下,在POM中依赖申明的顺序决定了谁会被解析使用,顺序最靠前的那个依赖优胜。

可选依赖:
A->B B->X(可选) B->Y(可选)
这里由于X,Y都是可选依赖,依赖都不会得意传递,为什么使用可选依赖这个特性,可能由于B实现了两个特性的东西,这两个特性是互斥的。比如B是一个持久层隔离工具包,支持多种数据库
在构建的时候需要两种数据库的驱动程序,但在使用这个工具包的时候只会依赖一种数据库。

因为X,Y属于可选依赖,它们只会对当前项目B产生影响,当其他项目依赖B项目的时候需要显示的声明依赖X或者依赖Y。

排除依赖:
如果用户不想引入传递性依赖,而是自己显示的声明依赖。
就可以启用exclusions 配置来排除传递性依赖,在使用exclusion时只需要声明groupId和artifactId,而不需要指定version,因为更具依赖调解maven解析pom之后不可能出现version不同,groupId和artifactId相同的两个依赖。

归类依赖:
<properties>
<cif-common.version>4.1.2-SNAPSHOT</cif-common.version>
</properties>

<dependency>

<groupId>com.alifi.hyperion</groupId>

<artifactId>cif.common</artifactId>

<version>${cif-common.version}</version>

</dependency>

<dependency>

<groupId>com.alifi.hyperion</groupId>

<artifactId>cif.service</artifactId>

<version>${cif-common.version}</version>

</dependency>
我们在升级cif的时候,这些依赖版本会一起升级。

优化依赖:

mvn dependency:list 通过该命令可以查看当前项目的已经解析的依赖,同时每个以依赖的范围也得意明确的标示。

com.alibaba.asc.shared:workplatform.share.buckettestclient:jar:1.0.0-SNAPSHOT:compile

com.alibaba.asc.shared:workplatform.share.buckettestcommon:jar:1.0.0-SNAPSHOT:compile

com.alibaba.china.shared:alibaba.apollo.commons:jar:1.0.0:compile

com.alibaba.china.shared:alibaba.apollo.general-orm-api:jar:1.0.0:compile

com.alibaba.china.shared:alibaba.apollo.smart-ibatis:jar:1.0.0:compile

com.alibaba.china.shared:apollo.commons:jar:1.0.0:compile

mvn dependency:tree运行命令可以查看当前项目的依赖树,可以看到某个依赖是通过哪个传递路径引入的。

com.alifi.aliloan.myth:myth.biz:jar:3.6.0-SNAPSHOT

+- com.alifi.aliloan.common:common.biz:jar:1.0.1-SNAPSHOT:compile

| +- com.alibaba.china.shared:headquarters.biz.common:jar:1.1:compile

| | +- com.alibaba.external:xml.jox:libd:0.0.0:compile

| | | +- com.alibaba.external:xml.jox__jox-1.16.jar:jar:0.0.0:compile

| | | \- com.alibaba.external:xml.jox__dtdparser-1.13.jar:jar:0.0.0:compile

| | +- com.alibaba.external:java.jce.cryptix:jar:0.0.0:compile

| | +- com.alibaba.external:jakarta.commons.fileupload:jar:1.2.1:compile

| | | \- com.alibaba.external:jakarta.commons.io:jar:1.4:compile (version managed from 1.3.2)

| | +- com.alibaba.shared:toolkit.biz.command:jar:1.0:compile

| | | +- com.alibaba.shared:toolkit.common.resourcebundle:jar:1.0:compile

mvn dependency:analyze用来获取那些使用但未声明与声明但未使用的的依赖

Used undeclared dependencies found:

com.alifi.aliloan.common:common.toolkit:jar:1.0.1-SNAPSHOT:compile

com.alibaba.external:java.servlet:jar:2.3:provided

com.alifi.mc:mc.common:jar:1.0.0-SNAPSHOT:compile

com.alibaba.external:sourceforge.spring:jar:2.5.6:compile

com.alifi.galaxy:galaxy.common.result:jar:1.0.1-SNAPSHOT:compile

com.alibaba.external:jakarta.commons.fileupload:jar:1.2.1:compile

com.alifi.crm:crm.service.model:jar:2.4.0-SNAPSHOT:compile

com.alibaba.external:sourceforge.spring.modules.core:jar:2.5.6.SEC02:compile

com.alibaba.china.shared:headquarters.biz.viewcachebase:jar:1.2:compile

com.alibaba.external:jakarta.commons.codec:jar:1.3:compile

com.alibaba.china.shared:toolkit.common.lang:jar:1.0:compile

com.alibaba.shared:toolkit.common.logging:jar:1.0:compile

com.alifi.galaxy:galaxy.common.paging:jar:1.0.0-SNAPSHOT:compile

com.alibaba.external:misc.aspectj__aspectjweaver-1.6.5.jar:jar:1.6.5:compile

com.alibaba.external:jakarta.commons.lang:jar:2.5:compile

com.alibaba.external:ajax.jsonlib:jar:2.2.1-jdk15:compile

com.alifi.aps:aps.model:jar:2.3.0-SNAPSHOT:compile

com.alibaba.external:jakarta.commons.httpclient:jar:3.1:compile

com.alibaba.asc.shared:workplatform.share.buckettestcommon:jar:1.0.0-SNAPSHOT:compile

com.alifi.aliloan.common:common.test:jar:1.0.1-SNAPSHOT:test

com.alibaba.china.shared:headquarters.biz.common:jar:1.1:compile

Unused declared dependencies found:

com.alifi.aliloan.common:common.service:jar:1.0.1-SNAPSHOT:compile

com.alibaba.external:org.slf4j.slf4j-log4j12:jar:1.5.11:compile

com.alibaba.platform.shared:comsat.collector:jar:1.0.5:compile

com.alibaba.external:jakarta.oro:jar:0.0.0:compile

com.alibaba.platform.shared:comsat.runtime:jar:1.0.5:compile

com.alibaba.platform.shared:comsat.common:jar:1.0.5:compile

com.alibaba.external:sourceforge.ezmorph:jar:0.0.0:compile

com.alibaba.external:jakarta.commons.dbcp:jar:1.4:compile
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: