maven 坐标和依赖

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
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值