《maven实战》_坐标和依赖

maven项目的坐标
1、每个java构件,在maven的管理下就有自己一个坐标,跟平面几何里的(x,y)类似。
由groupId、artifactId、version、packaging、classifier
比如:

org.sonatype.nexus
nexus-indexer
2.0.0
jar

groupId(必填):当前maven项目隶属的实际项目,比如上例,org.sonatype表示Sonatype公司建立的一个非盈利性组织,nexus是实际项目名
artifactId(必填); 当前maven项目,推荐名称为 实际项目名+构件名,如nexus-indexer
version(必填):当前maven项目版本
packaging(选填):当前maven项目的打包方式
classifier(不能直接定义,一般不填):用来定义构建输出的一些附属构建,通过使用一些插件生成,类似java文档和源码之类的文件,也有自己的坐标。比如nexus-indexer-2.00-javadoc.jar,nexus-indexer-2.00-sources.jar

maven项目的依赖
1、依赖的配置
这是一个依赖最全的元素

 <dependencies> 
    <dependency>
      <groupId>junit</groupId>
      <artifactId>junit</artifactId>
      <version>3.8.1</version>
      <type>XXX</type>
      <scope>test</scope>
      <optional>XXX</optional>
      <exclusions>
        <exclusion>
          <groupId>XXX</groupId>
          <artifactId>XXXX</artifactId>
        </exclusion>
      </exclusions>
    </dependency>
  </dependencies>

● groupId、artifactId和version 是依赖的基本坐标,必填
● type: 依赖的类型,jar或war,默认为jar,一般不用声明
● scope:依赖的范围、maven在 编译、测试,运行时,都会产生各自的classpath,将依赖引入到各自的classpath,默认为complie,一般不做声明
● optional:标记依赖是否可选
● exclusion:排除传递性依赖,比如A.jar依赖1.0版本的B.jar,然后当前maven项目依赖 A.jar,但又不想要1.0版本的B.jar,可使用此标签进行排除,然后自己再声明下直接依赖合适版本的B.jar 就ok了

2、传递性依赖
传递性依赖是 项目A依赖了B.jar,B.jar依赖C.jar, C.jar 就是A项目的传递性依赖。用pom引入 B.jar时,Maven 会自动引入C.jar.
有了传递性依赖机制,在使用 B.jar的时候就不用去考虑它依赖了什么,也不用担心引入多余的依赖.Maven会解析各个直接依赖的 POM,将哪些必要的间接依赖,已传递性依赖的形式引入到当前项目中。

3、依赖的常见问题解决:
1. 排除依赖
传递性依赖会给项目隐式的引入很多依赖,这极大简化了项目依赖的管理,但是有些传递性依赖由于某种原因,想将此传递性依赖的版本换成更稳定的版本,该如何操作?
使用便可,如下图

这里写图片描述

2、归类依赖
比如maven项目中有许多Spring Framework项目的依赖,spring-core:2.5.6,spring-context:2.5.6等,这些依赖如果升级,版本都应该是一致的,所以可以在pom.xml里使用标签进行统一版本管理,如下图。

这里写图片描述

3、优化依赖
检查maven依赖问题的常用三个命令:
mvn dependency:list 查看当前项目的所有依赖
这里写图片描述
mvn dependency:tree 查看当前项目的依赖树
这里写图片描述
mvn dependency:analyze 分析当前项目的依赖
这里写图片描述

这里写图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值