《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>junitgroupId>
      <artifactId>junitartifactId>
      <version>3.8.1version>
      <type>XXXtype>
      <scope>testscope>
      <optional>XXXoptional>
      <exclusions>
        <exclusion>
          <groupId>XXXgroupId>
          <artifactId>XXXXartifactId>
        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. 排除依赖
传递性依赖会给项目隐式的引入很多依赖,这极大简化了项目依赖的管理,但是有些传递性依赖由于某种原因,想将此传递性依赖的版本换成更稳定的版本,该如何操作?
使用便可,如下图

《maven实战》_坐标和依赖_第1张图片

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

《maven实战》_坐标和依赖_第2张图片

3、优化依赖
检查maven依赖问题的常用三个命令:
mvn dependency:list 查看当前项目的所有依赖
《maven实战》_坐标和依赖_第3张图片
mvn dependency:tree 查看当前项目的依赖树
《maven实战》_坐标和依赖_第4张图片
mvn dependency:analyze 分析当前项目的依赖
《maven实战》_坐标和依赖_第5张图片

《maven实战》_坐标和依赖_第6张图片

你可能感兴趣的:(Java开发,maven)