坐标和依赖

来源:互联网 发布:国网网络大学考试烦人 编辑:程序博客网 时间:2024/06/09 19:24
1.坐标详解:
    Maven坐标为各种构件引入了秩序,任何一个构件都必须明确定义自己的坐标,而一组Maven坐标通过一些元素定义的。如:groupId,artifactId,version,packaging,classifier等。
例子:
    <groupId>org.sonatype.nexus</groupId>  // 定义Maven项目隶属的是实际项目
    <artifactId>nexus-indexer</artifactId> //实际项目中的一个模块
    <version>jar</version>  //当前的版本
    <packaging></packaging> //该元素定义Maven项目的打包方式。首先打包方式通常与所生构件的文件扩展名对应。如上面实例中的packing为jar,最终的文件是:nexus-indexer-2.0.0.jar
2.依赖范围:
    complie:编译依赖范围;如果没有指定,就会默认使用该依赖范围。使用此依赖范围的Maven依赖,对于编译、测试、运行三种classpath都有效。例子:Spring-core
    test:        测试依赖范围;只对测试的classpath有效。例子:Junit
    provided:已提供依赖范围;使用此依赖范围的Maven依赖,对于编译和测试classp有效,但是在编译主代码时无效。例子:servlet-api
    runtime: 运行范围;在测试和运行classpath有效,但是在编译主代码时无效;例子:JDBC驱动实现
    system:    系统依赖范围;该依赖与三种classpath的关系和provided依赖范围完全一致
3.依赖传递
    依赖调度:项目A依赖关系:A->B->C->X(1,0),A->D->X(2,0);X是A的依赖传递,但是俩条依赖路径上有俩个版本的X;Maven如何解析:Maven依赖调度的第一个原则是:路径最近者优先;当俩个路径都为一样的时候,就采用Maven第二个原则:第一声明者优先;如:A->B->C->X(1,0),A->D->E->X(2,0);俩个路径都是2;那么会解析第一个,x(1,0);
4.可选依赖
    假设有这一个依赖关系:项目A依赖于项目B,项目B依赖于项目X和Y,B对X和Y的依赖都是可选依赖;A->B、B->X(可选)、B-Y(可选)如果所有者三个依赖的范围都是compile,那么X,Y就是A的compile范围传递性依赖。由于这里X,Y是可选依赖,依赖将不会传递,即:X,Y将不会对A有任何影响:
最佳实战:(Maven依赖常见的技巧)
   1.排除依赖
           传递性依赖,会给项目隐士的引入很多依赖,极大简化项目依赖的管理,但是会带来麻烦

        项目A依赖与项目B,但是由于一些原因,不想引入传递性依赖C,而是自己显示地声明地声明对于项目C1.1.0版本依赖。代码中使用exclusions元素声明排除依赖,exclusions可以包含一个和多个exclusion子元素。exclusion只需要groupId 和 artifactId。
    2.归类依赖:
            
用properties声明;然后在下面使用,统一版本。
      3.优化依赖
            Maven会自动解析所有项目的直接依赖和传递性依赖,并且根据正确判断每个依赖的范围,对于一些依赖冲突,也能够进行调节,以确保任何一个构件只有唯一的版本在依赖张存在。最后得到的那些依赖称为已解析依赖(Resolved Dependcy).可以运行如下的命令查看当前项目的已解析:
    mvn dependcy:list
    mvn dependcy:tree
    mvn dependcy:analyze
0 0
原创粉丝点击