【maven总结】(1) 坐标与依赖

来源:互联网 发布:ftp数据端口范围 编辑:程序博客网 时间:2024/06/08 04:29

     

     maven可以管理项目的依赖,如何找到jar的具体位置,唯一的标识就是坐标。开发过程中需要导入项目所依赖的jar,多个项目之间依赖的管理也有原则。




1.坐标的概念


<groupId>org.sonatype.nexus</groupId><artifactId>nexus-indexer</artifactId><version>2.0.0</version><packaging>jar</packaging>


       maven 的所有构件均通过坐标进行组织和管理。maven 的坐标通过 5 个元素进行定义,其中 groupId、artifactId、version 是必须的,packaging 是可选的(默认为jar),classifier 是不能直接定义的。

groupId:定义当前 Maven 项目所属的实际项目,跟 Java 包名类似,通常与域名反向一一对应。


artifactId:定义当前 Maven 项目的一个模块,默认情况下,Maven 生成的构件,其文件名会以 artifactId 开头,如 hibernate-core-3.6.5.Final.jar。


version:定义项目版本。


packaging:定义项目打包方式,如 jar,war,pom,zip ……,默认为 jar。


classifier:定义项目的附属构件,如 hibernate-core-3.6.6.Final-sources.jar,hibernate-core-3.6.6.Final-javadoc.jar,其中 sources 和 javadoc 就是这两个附属构件的 classifier。classifier 不能直接定义,通常由附加的插件帮助生成。


2.依赖


    2.1.范围


    compile:编译依赖范围。如果没有指定,就会默认使用该依赖范围

    test:测试依赖范围。只对测试classpath有效

    provided:已提供依赖范围。对于编译和测试classpath有效

    runtime:运行时依赖范围。对于测试和运行有效

    system:系统依赖范围。该依赖与三种classpath的关系,和provided依赖范围完全一致。

    import:导入依赖范围。

    

    2.2传递性依赖

    如果A->B->C,即A对于B的依赖范围是compile,B对于C的依赖范围是compile,那么A对于C的依赖范围是compile。此时,我们称A对于B是第一直接依赖,B对于C是第二直接依赖(根据情况的不同可能会有第三、第四……直接依赖),A对于C是传递性依赖。



    2.3 依赖调解

     1.路径最近者优先

     2.最先声明者优先


    2.4 可选依赖

   可选依赖,依赖将不会得以传递。 <optional>true</optional>


    2.5 排除依赖

    不想引入的依赖,使用代码中用exclusions元素可以包含多个exclusion子元素。

    

    2.6 版本统一管理

    <properties>
        <springframework.version>3.1.2.RELEASE</springframework.version>
    </properties>



3.总结


    pom是可以继承的,通常对于一个大型的项目或是多个module的情况,子模块的pom需要指定父模块的pom。利用maven可以高效管理我们的项目。