Maven 命令行打包 和 pom.xml的常用配置

maven 命令行打包

mvn -v, --show-version

 

 

mvn -h, --help

使用 help 命令可以看到 maven 命令的帮助文档,下面主要介绍两个常用的指令 —— D 和 P

 

mvn -D, --define <arg>

mvn -DpropertyName=propertyValue clean package 可以用来临时定义属性和值。如果 pom.xml 中已经有该属性,那么会替换掉 pom.xml 中的值。

如果需要定义多个变量,可以用空格分隔
mvn -DpropA=valueA -DpropB=valueB -DpropC=valueC clean package

当然这个属性也可以直接在 pom.xml 文件下配置

 

mvn -P, --activate-profiles <arg>

P 表示 Profiles 配置文件,需要在 <profile> 标签中指定 <id> 才能用 -P 使之生效。

假如 pom.xml 如下

 

 

mvn参数-N、-U理解

    1. 关于-N

      -N,--non-recursive Do not recurse into sub-projects

      意思是,不递归到子项目(子模块)。

      举例:

      一个父项目下Father面有3个子项目A、B、C,都生成jar包,则有Father.jar、A.jar、B.jar、C.jar;
      这个时候A项目依赖了B、C项目。

      此时如果使用mvn clean install -N,则只会把Father.jar安装到本地仓库(~/.m2/repository),
      而不会安装其他三个包

      造成的问题是,如果你此时使用如下命令拷贝依赖包,则会报错:说找不到依赖包B.jar/C.jar

      mvn dependency:copy-dependencies -DoutputDirectory=$WORKSPACE/dependencies
      
    2. 关于-U

      -U,--update-snapshots Forces a check for missing releases
      and updated snapshots on remote repositories

      意思是:强制刷新本地仓库不存在release版和所有的snapshots版本。

      • 对于release版本,本地已经存在,则不会重复下载
      • 对于snapshots版本,不管本地是否存在,都会强制刷新,但是刷新并不意味着把jar重新下载一遍。
        只下载几个比较小的文件,通过这几个小文件确定本地和远程仓库的版本是否一致,再决定是否下载

那么打包时执行 mvn clean package -P prod 将只激活 prod 环境的 profile 配置(也就是说此时 test 和 dev 的配置不会生效)

mvn package 与 mvn install 的区别

 

 

mvn 打包插件的执行顺序

我这里用的是 maven 3.1.1 打包 android 项目

 

 

 

 

 

实战

案例一

使用 mvn 打包,并跳过测试,然后生成文档,使用 dev 配置

 

 

案例二

将模块A生成的 jar,复制到模块B的 libs 目录下。
安装模块到 maven 仓库。

 

默认情况下,cmd 的命令发起调用后就立即返回了。而 CALL 是一个调用外部批处理程序的指令,类似于函数调用的执行逻辑,它会一直等到函数执行结束才返回

pom.xml的常用配置

denpendencyManagement 与 pluginManagement

denpendencyManagement是用于管理项目jar包依赖,pluginManagement是用于管理plugin。
它们的作用是列出依赖的jar包或者plugin包,让子pom来决定是否引用。

对不同的配置赋予不同的属性

 

activation 元素用来指定激活条件。当没有指定条件,然后指定 activeByDefault 为 true 的时候,就表示没有指明 profile 的情况下默认激活。也就是说 mvn package 将使用 dev 的配置,而 mvn package -P prod 的时候使用的才是 prod 的配置。

根据不同配置使用不同的源文件

 

然后在 profiles/dev 目录下新建 java 文件

 

 

 

执行打包命令 mvn clean package -DskipTests -Pdev,就可以看到 /profiles/dev 目录下的 java 文件全部被复制到了 /src/com/companyName/global 目录下了,并且 isDebugEnable 的值也被替换了。

配置项说明:

  • parse 用来指明具体在 maven 的哪个生命周期执行该任务

 

maven 的生命周期表

 

 

 

  • inherited 用来指明 execution 是否传递到子 pom.xml 里
  • filtering属性用来表示资源文件中的 “EL表达式占位符” 是否需要被替换,true为需要替换

 

posted @ 2020-10-27 17:58  D.零下的小书屋  阅读(1949)  评论(0编辑  收藏  举报