zoukankan      html  css  js  c++  java
  • 一次打包引发的思考,原来maven还能这么玩?

    持续原创输出,点击上方蓝字关注我

    目录

    • 前言
    • 依赖关系
    • 你会怎么做?
    • 必知的几个参数
    • 总结

    前言

    昨天有一个读者找我的交流工作心得,偶然间提到一个有趣的问题,如下:

    大致的意思:公司最近在整多模块开发,由于模块之间相互依赖,每次打包都很烦,必须根据依赖关系逐一进行打包,有没有省事的办法呢?

    其实玩转Maven的朋友都知道,只需要一条命令即可解决问题。

    依赖关系

    假设有一个多模块项目,父工程P中含有三个子模块ABC,三个模块有如下的依赖关系:

    1. A 依赖 BC
    2. B 依赖 C
    依赖关系图
    依赖关系图

    父工程Ppom.xml如下:

    .....
    <modules>
      <module>A</module>
      <module>B</module>
      <module>C</module>
    </modules>
    .....
    

    A模块的pom.xml如下:

    ....
    <dependency>
      <groupId>xxx.xxxx</groupId>
      <artifactId>B</artifactId>
      <version>xxxx</version>
    </dependency>
    .....
    

    B模块的pom.xml如下:

    ....
    <dependency>
      <groupId>xxx.xxxx</groupId>
      <artifactId>C</artifactId>
      <version>xxxx</version>
    </dependency>
    .....
    

    C模块的pom.xml如下:

    ....
    

    你会怎么做?

    现在产品需要上线项目A,你该如何打包?

    最容易想到的则是分开打包,分别执行如下的命令:

    mvn clean install C
    mvn clean install B
    mvn clean package A
    

    以上三个模块轮流打包,至少需要五分钟以上吧,你不慌吗?

    慌的一批
    慌的一批

    重点来了,我只需要如下一条命令即可打包完成:

    mvn clean package -pl A -am -P test -DskipTests=true
    

    以上命令有什么高深的吗?-P指定环境,-DskipTests=true跳过测试,但是-pl-am是什么?

    答案肯定是在-pl-am这两个参数了。

    必知的几个参数

    从以上的例子中可以知道重要的就是-pl-am这两个参数,那么是什么意思呢?如下:

    参数 说明
    -pl 可选,指定需要处理的工程,多个使用英文逗号分隔,取值是artifactId
    -am 可选,同时处理 pl参数 指定模块的依赖模块
    -amd 可选,同时处理依赖于 pl参数 指定模块的模块
    -N 可选,表示不递归子模块

    怎么样,理解了吗?是不是有点晦涩难懂,哈哈....

    what?
    what?

    别着急,下面通过几个命令理解一下(全部在父工程P的根目录下执行)。

    1. mvn clean install -pl A -am

    对父工程P、子模块A以及A模块依赖的BC模块执行mvn clean install操作。

    这个命令执行成功后,可以看到PABC四个模块全部安装到本地了。

    1. mvn clean install -pl C -am

    对父工程P、子模块C模块执行mvn clean install操作。

    这个命令执行成功后,可以看到PC两个模块安装到本地。

    由于C模块不依赖其他的两个子模块,因此AB模块不会执行相关命令。

    1. mvn clean install -pl C -amd

    对父工程P、子模块C以及依赖于C模块的BC模块执行mvn clean install`操作。

    这个命令执行成功后,可以看到PABC四个模块全部安装到本地了。

    1. mvn clean install -N

    只会打包父工程P,它的子模块将不会执行相关操作。

    怎么样?通过以上的命令应该理解了吧。

    总结

    随着项目的体量逐渐增长,可不止上面的几个模块,学会以上几个命令,提升的效率可不止一倍啊。

  • 相关阅读:
    PgSql备份pg_dump与还原手记pg_restore(转)
    精通 JS正则表达式(转)
    88个常用英语词语搭配
    C3P0 代码分析
    windows 域名+虚拟目录 (php)
    postgresql 查询字段中的某些数据
    Memcached 在windows下的安装 支持 phpwind 后台Memcache 缓存配置
    正则表达式学习笔记
    Word2007快捷键大全
    Windows 版本说明
  • 原文地址:https://www.cnblogs.com/Chenjiabing/p/13947674.html
Copyright © 2011-2022 走看看