zoukankan      html  css  js  c++  java
  • maven生命周期和依赖的范围

    转载:http://blog.csdn.net/J080624/article/details/54692444

    什么是依赖?

    当 A.jar 包用到了 B.jar 包时,A就对B产生了依赖;

    在项目中以依赖的方式引入一个jar:

    使用dependency标签指定被依赖的jar的坐标即可。

        <dependency>
                <groupId>junit</groupId>
                <artifactId>junit</artifactId>
                <version>4.0</version> 
                <scope>test</scope>
        </dependency>   

    依赖的范围

    注意上述最后一项:scope,表明依赖的范围。最常用的三个范围:test compile provided。

    这里写图片描述

    这里写图片描述


    依赖的其他作用域:

    runtime:表示该依赖项只有在运行时才是需要的,在编译的时候不需要。这种类型的依赖项将在运行和test的类路径下可以访问。
    
    system:当scope为system时,表示该依赖项是我们自己提供的,不需要Maven到仓库里面去找。
    
    指定scope为system需要与另一个属性元素systemPath一起使用,它表示该依赖项在当前系统的位置,使用的是绝对路径。

    依赖的传递性

    A 依赖 B,B 依赖 C,那么 A 是否可以使用 C 呢?

    答:如果 B 依赖 C 的范围是compile,就可以依赖;否则,不可。【test provided 范围的依赖是不可以传递的!】

    这里写图片描述


    依赖的原则

    ① 路径最短者优先

    这里写图片描述


    ② 路径相同时先声明着优先

    如下图,同时依赖HelloFriend和OurFriends,但是二者所依赖的log4j不同。那么MakeFriends将会依赖 pom.xml中,先声明的那个工程的log4j。

    这里写图片描述


    依赖的排除

    如果不想使用依赖的jar,那么可以在pom.xml文件中配置:

                <exclusions>
                    <exclusion>
                        <groupId>commons-logging</groupId>
                        <artifactId>commons-logging</artifactId>
                    </exclusion>
                </exclusions>

    Maven的生命周期

    Maven生命周期定义了各个构建环节的执行顺序,有了这个清单,Maven就可以自动化的执行构建命令了。

    Maven有三套相互独立的生命周期,分别是:

    ① Clean Lifecycle在进行真正的构建之前进行一些清理工作;

    ② Default Lifecycle 构建的核心部门,编译、测试、打包、安装、部署等等;

    ③ Site Lifecycle 生成项目报告 ,站点。发布点(没用过)。

    它们是相互独立的,可以仅仅调用clean来清理工作目录,仅仅调用site来生成站点。当然你也可以直接运行 mvn clean install site 运行所有这三套生命周期。


    每套生命周期都由一组阶段(Phase)组成,我们平时在命令行输入的命令总会对应于一个特定的阶段。 
    比如,运行 mvn clean,这个clean是Clean 生命周期的一个阶段。有 Clean 生命周期,也有 clean阶段。

    ① Clean生命周期:

    • pre-clean 执行一些需要在clean之前完成的工作;
    • clean 移除所有上一次构建生成的文件;
    • post-clean执行一些需要在clean之后立刻完成的工作

    ② Site生命周期:

    • pre-site 执行一些需要在生成站点文档之前完成的工作;
    • site 生成项目的站点文档;
    • post-site 执行一些需要在生成站点文档之后完成的工作,并且为部署做准备;
    • site-deploy 将生成的站点文档部署到特定的服务器上;

    这里经常使用到的site阶段和site-deploy阶段,用于生成和发布Maven站点。

    ③ Default 生命周期

    Default生命周期是Maven生命周期中最重要的一个,绝大部分工作都发生在这个生命周期中。

    比较重要且常用的阶段:

    validate
    generate-sources
    process-sources
    generate-resources
    process-resources 复制并处理资源文件,至目标目录,准备打包;
    
    compile 编译项目的源代码
    
    process-classes
    generate-test-sources
    process-test-sources
    generate-test-resources
    process-test-resources复制并处理资源文件,至目标测试目录;
    
    test-compile 编译测试源代码
    
    process-test-classes
    
    test 使用合适的单位测试框架运行测试;这些测试代码不会被打包或部署。
    
    prepare-package
    package 接受编译好的代码,打包成可发布的格式,如JAR;
    
    pre-integration-test
    integration-test
    post-integration-test
    
    verify
    install 将包安装至本地仓库,以让其他项目依赖;
    deploy 将最终的包复制到远程的仓库,以让其他开发人员与项目共享或部署到服务器上运行。
    

    生命周期与自动化构建

    运行任何一个阶段的时候,它(同一生命周期)前面的所有阶段都会被运行。

    例如我们运行 mvn install 的时候,代码会被 编译、测试、打包。这就是Maven为什么能够自动执行构建过程的各个环节的原因。

    此外 ,Maven的插件机制是完全依赖Maven的生命周期的!

    参考:

    1、https://www.jianshu.com/p/6d72c5090e80

    2、http://wiki.jikexueyuan.com/project/maven/build-life-cycle.html

  • 相关阅读:
    how to uninstall devkit
    asp.net中bin目录下的 dll.refresh文件
    查找2个分支的共同父节点
    Three ways to do WCF instance management
    WCF Concurrency (Single, Multiple, and Reentrant) and Throttling
    检查string是否为double
    How to hide TabPage from TabControl
    获取当前系统中的时区
    git svn cygwin_exception
    lodoop打印控制具体解释
  • 原文地址:https://www.cnblogs.com/shengulong/p/8287510.html
Copyright © 2011-2022 走看看