• 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

  • 相关阅读:
    Strange RadioButton group behavior with ToolBar
    在XAML中为ItemsControl定义分组,适合mvvm绑定
    如何编写无法维护的代码 让自己稳拿铁饭碗 ;-)
    WPF 应用程序资源、内容和数据文件
    XNA+WPF solution worked
    object转List<XXX>的问题
    VS2013 执行Enable-Migrations,产生错误的解决办法
    WPF 为 PasswordBox 控件添加水印,最低级版
    为 ItemsControl 类型的控件提供行号,mvvm模式 绑定集合
    把父窗体设置为桌面,显示桌面时程序仍然能显示
  • 原文地址:https://www.cnblogs.com/shengulong/p/8287510.html
Copyright © 2020-2023  润新知