美文网首页
Maven基础知识

Maven基础知识

作者: eugenewyj | 来源:发表于2017-01-16 20:58 被阅读0次

    [TOC]

    Maven基础知识

    核心概念

    (Lifecycle)生命周期 -> (Phase)阶段 -> (Goal)目标

    lifecycle是总任务,phase就是总任务分出来的子任务,但是这些子任务是被规格化的,它可以同时被多个lifecycle所包含,一个lifecycle可以包含任意个phase,phase的执行是按顺序的,一个phase可以绑定很多个goal,至少为一个,没有goal的phase是没有意义的。

    Maven常用技巧

    本地执行依赖检查

    mvn -U clean package -Dmaven.test.skip=true enforcer:enforce -DcheckDeployRelease_skip=true -Denforcer.skip=false
    

    强制更新依赖的包

    mvn clean install -e -U
    # -e 详细异常
    # -U 强制更新
    

    跳过test

    -Dmaven.test.skip=true
    

    mvn help 插件

    1、 mvn help:active-profiles      //列出当前构建中活动的Profile(项目的、用户的、全局的)
    2、 mvn help:effective-pom        //显示当前构建的实际POM,包含活动的Profile
    3、 mvn help:effective-settings   //打印出项目的实际 settings, 包括从全局的 settings 和用户级别 settings 继承的配置。
    4、 mvn help:describe  -Dplugin=Compiler -Dmojo=compile -Dfull
    

    依赖机制介绍

    依赖传递

    • 依赖仲裁
      Maven2.0只支持最短路径依赖,比如A -> B -> C -> D 2.0 和 A -> E -> D 1.0,那么在构建A时D 1.0将被采用,如果要采用D 2.0你需要在A中明确依赖D2.0。当路径深度相同时,比如A->B->D2.0 和 A->E->D1.0,2.0.8之前不确定采用哪个版本,而2.0.9版本后,采用先声明的那个版本。�

    • 依赖管理
      允许作者明确指定依赖artifacts的版本,不管artifacts是通过传递依赖引入的,还是未指定artifacts的版本。

    • 依赖范围

    1、compile
    默认的范围,compile依赖范围的artifacts在项目的所有classpath(compile, runtime, test)中都可以引用到,而且会传递给依赖的项目。
    2、provided
    更像compile,但是依赖的artifacts在JDK或容器中已经存在,发布时项目的classpath(runtime)中不会带上provided范围的artifacts。
    3、runtime
    编译项目是不需要此依赖artifacts,但是项目运行时(runtime, test)需要此依赖artifacts。
    4、test
    正常项目编译和运行不需要此依赖artifacts,只有编译和运行测试代码时才需要。
    5、system
    与provided类似,但是你必须明确提供此依赖artifacts,而且此依赖artifacts存于本地而不是maven仓库里。
    6、import(2.0.9以后支持)
    这个范围只用于<dependencyManagement>部分的pom类型的artifacts,它表示artifacts应该用他的POM的<dependencyManangement>中依赖artifacts的替换它。因为是替换,所以import范围的依赖不参与依赖仲裁中路径深度的计算。
    
    • 排除依赖(exclusion)
    • 可选依赖(optional)
      如果项目Y -> Z (可选),X -> Y则X只引入依赖Y,而不会引入依赖Z。“可选依赖”可以看做是“默认排除依赖”。

    相关文章

      网友评论

          本文标题:Maven基础知识

          本文链接:https://www.haomeiwen.com/subject/njbpbttx.html