zoukankan      html  css  js  c++  java
  • Java maven构建命令使用总结

    实践环境

    Apache Maven 3.0.5 (Red Hat 3.0.5-17)

    maven构建生命周期

    学习Maven构建命令之前,我们不烦先简单了解下Maven构建生命周期。

    Maven基于构建生命周期的核心概念。构建生命周期由phase(形如clean,compile, install等)组成。每个phase由插件目标Plugin goal(形如sonar:sonar)组成。也就是说,每个phase负责构建生命周期中的特定步骤,并且通过绑定到该phase的的插件来实现这些步骤的具体执行。

    每个插件目标代表一个特定的任务(比phase更精细),可能绑定到0个或多个构建phase。未绑定到任何phase的目标可以通过直接调用在构建生命周期之外执行。执行顺序取决于插件目标和phase的顺序

    默认的生命周期由以下phase组成( 点击查看完整的phase列表

    • validate - 校验项目是否是正确,并且是否可获取所有必要信息
    • compile
    • test
    • package
    • verify - 对集成测试结果进行检查以确保满足关键质量。
    • install
    • deploy

    maven构建命令

    mvn [选项] [<goal(s)>] [<phase(s)>]

    常用选项:

    -f,--file <arg> 强制使用指定的POM文件

    -U,--update-snapshots 强制检查缺少的release版和远程仓库已更新snapshots版(Forces a check for missing releases and updated snapshots on remote repositories)。个人理解:

    • 如果构建依赖的release版软件包在本地仓库不存在,则强制从远程仓库下载最新release版依赖包,否则不下载,使用本地仓库已有的release版依赖包
    • 不管构建依赖的snapshots版软件包在本地仓库是否存在,都强制检查远程仓库对应版本的软件包是否存在更新,如果存在则下载更新。

    -N,--non-recursive 不递归到子项目(子模块)。

    说明:多个goalphase之间使用空格分隔。

    示例:

    # mvn clean -Dautoconfig.skip=true -Dmaven.test.skip=true install
    

    常用内置phase介绍

    clean 删除前一次构建生成的文件,包括classes目录中的.class文件,但不会删除classes, generated-sources, maven-status目录。

    compile 编译项目源代码,会生成.class文件和对应软件包,注意:*.class以及软件包(比如*.jar)不存在,或者源代码有变动的情况下,执行编译,才会重新生成*.class及对应软件包,packageinstalldeploy等皆如此。

    test 使用合适的单元测试框架(默认为Junit)运行测试。这些测试不应要求打包或部署代码。可使用-Dmaven.test.skip=true-DskipTests参数跳过测试。这两者的区别在于:

    • -DskipTests 不执行测试用例,但编译测试用例类生成相应的.class文件到target/test-classes下。
    • -Dmaven.test.skip=true,不执行测试用例,也不编译测试用例类。

    package 获取编译后的代码,并将其打包为可分发的格式,例如jar

    install 将打包的软件包安装至本地仓库,为本地其它项目提供依赖。实践表名,执行install命令,可能会生成在compile阶段未生成的软件包。

    deploy 在集成或发布环境中完成,将最终软件包复制到远程存仓库,以便与其他开发人员和项目共享。

    注意:

    1、phase之间,phasegoal之间是有顺序区分的,按从左到右的顺序执行,如下两个命令,看似相同,执行效果是不一样的。

    # mvn clean install # 先执行clean,再执行install
    # mvn install clean # 先执行install,再执行clean
    

    2、maven执行某个phase之前,会优按顺序执行该phase所属生命周期内,位于其之前的所有phase,比如执行默认生命周期的install,会优先执行validate —> compile -> test -> package -> verify(假设未使用其它会跳过phase的选项参数)

    插件目标应用举例

    sonar扫描

    # mvn clean -Dautoconfig.skip=true -Dmaven.test.skip=true compile org.jacoco:jacoco-maven-plugin:prepare-agent sonar:sonar
    

    问题:这里为啥需要用org.jacoco:jacoco-maven-plugin:prepare-agent插件目标呢?

    答案:因为仅靠SonarQube本身是不知道实际上执行了哪些测试以及它们如何覆盖代码的,要获取此信息,它依赖于第三方测试覆盖率工具,对于Java,它依赖于JaCoCo收集和提供的数据

    关于父POM构建

    假设项目中包含子项目、模块,那么构建父POM时,会按序构建所有子项目、子模块,可以简单理解为批量构建。

    参考连接

    https://maven.apache.org/guides/introduction/introduction-to-the-lifecycle.html

    https://docs.sonarqube.org/latest/analysis/scan/sonarscanner-for-maven/

    https://maven.apache.org/run.html

    作者:授客
    QQ:1033553122
    全国软件测试QQ交流群:7156436

    Git地址:https://gitee.com/ishouke
    友情提示:限于时间仓促,文中可能存在错误,欢迎指正、评论!
    作者五行缺钱,如果觉得文章对您有帮助,请扫描下边的二维码打赏作者,金额随意,您的支持将是我继续创作的源动力,打赏后如有任何疑问,请联系我!!!
               微信打赏                        支付宝打赏                  全国软件测试交流QQ群  
                  

  • 相关阅读:
    打造基于CentOS7的xfce最简工作环境
    Linux下C程序的编辑,编译和运行以及调试
    修正 XE6 TListView 上方 SearchBok 右边的清除钮显示
    TabControl 显示彩色的图示 (XE6 Firemonkey)
    TSwitch 中文简繁显示支持(XE6 Android)
    改变 TMemo 的背景颜色 (Firemonkey)
    修正 XE5 Android 键盘三个问题
    Delphi 收藏
    展示 Popup 的使用方法
    ListView 下拉更新 (支持 Android)
  • 原文地址:https://www.cnblogs.com/shouke/p/15700600.html
Copyright © 2011-2022 走看看