Maven使用 | 多模块下的打包问题

  • 背景
  • 1. Maven相关知识介绍
    • 1.1 The Reactor
    • 1.2 Reactor Sorting
    • 1.3 Maven高级reactor命令
    • 1.4 总结
  • 2. 多模块打包的正确做法
    • 2.1 Maven生命周期
    • 2.2 第一次打包
    • 2.3 第二次打包

背景

在实际的Java项目中,经常会见到多模块应用 (multi-module applications),比如一个简单的基于Maven多模块项目的文件结构如下:

+- pom.xml
+- my-app
| +- pom.xml
| +- src
|   +- main
|     +- java
+- my-webapp
| +- pom.xml
| +- src
|   +- main
|     +- webapp
+- my-others
| +- pom.xml
| +- src
|   +- main
|     +- others

这个示例项目包含my-appmy-webapp两个子项目,其中my-webapp依赖于my-app,但如果我们只希望打包my-webapp这个项目,需要怎么做呢?

1. Maven相关知识介绍

1.1 The Reactor

The mechanism in Maven that handles multi-module projects is referred to as the reactor. This part of the Maven core does the following:

  • Collects all the available modules to build
  • Sorts the projects into the correct build order
  • Builds the selected projects in order

Maven中处理多模块项目的机制称为Reactor。Maven 核心的这一部分执行以下操作:

  • 收集要构建的所有可用模块
  • 将项目按正确的生成顺序排序
  • 按顺序生成选定的项目

1.2 Reactor Sorting

由于多模块构建中的模块可以相互依赖,因此反应堆必须对所有项目进行排序,以确保在需要之前构建任何项目。

对项目进行排序时,将遵循以下关系:

  • 项目依赖于生成中的另一个模块
  • 插件声明,其中插件是构建中的另一个模块
  • 插件依赖于构建中的另一个模块
  • 生成中另一个模块上的生成扩展声明
  • 元素中声明的顺序(如果没有其他规则适用)

1.3 Maven高级reactor命令

-pl, --projectsBuild specified reactor projects instead of all projects
-am, --also-makeIf project list is specified, also build projects required by the list

1.4 总结

因此,要想正确对某个子模块打包,就必须要使用到Maven的Reactor机制,使Maven能够正确理解子模块打包所需依赖的顺序。

2. 多模块打包的正确做法

2.1 Maven生命周期

  • package: 完成了项目编译、单元测试、打包功能,但没有把打好的可执行jar包(war包或其它形式的包)布署到本地maven仓库和远程maven私服仓库
  • install: 完成了项目编译、单元测试、打包功能,同时把打好的可执行jar包(war包或其它形式的包)布署到本地maven仓库,但没有布署到远程maven私服仓库。
  • deploy: 完成了项目编译、单元测试、打包功能,同时把打好的可执行jar包(war包或其它形式的包)布署到本地maven仓库和远程maven私服仓库

2.2 第一次打包

需要注意的是,如果是第一次打包,则需要在最顶层目录下,对指定子模块进行打包,使用Maven命令如下所示:

mvn install -pl my-webapp -am
  • 至于使用installpackage,则取决于是否还需要进行进一步代码修改、再打包,如果需要,使用install可以将打好的可执行jar包(war包或其它形式的包)布署到本地maven仓库

2.3 第二次打包

  • 如果上一步已经再顶层目录下执行过install,对指定子模块的二次打包只需要在子目录下执行即可(在依赖的其他模块代码不修改的情况下),如果依赖的其他模块代码修改了,则仍需要在顶层目录下进行打包

Maven使用 | 多模块下的打包问题相关推荐

  1. android ---- 多渠道、多模块下自动化发布maven

    最近重构项目,项目中有很多模块会提供给第三方使用.以前的做法是将所用模块打成一个本地aar 包给使用方使用.随着接入方的增加,就会有不同的需求,比如有些接入方只使用模块A,其他模块不再使用.于是在这次 ...

  2. maven profile filter 线上线下分开打包配置

    maven自动选择不同的配置文件打包profile+filter 1. profile: [要点:] activeByDefault默认激活,不用再mvn命令时指定额外参数: [注意:] 使用非默认的 ...

  3. Maven学习总结(八)——使用Maven构建多模块项目

    2019独角兽企业重金招聘Python工程师标准>>> Maven学习总结(八)--使用Maven构建多模块项目 在平时的Javaweb项目开发中为了便于后期的维护,我们一般会进行分 ...

  4. Maven学习总结(8)——使用Maven构建多模块项目

    2019独角兽企业重金招聘Python工程师标准>>> Maven学习总结(八)--使用Maven构建多模块项目 在平时的Javaweb项目开发中为了便于后期的维护,我们一般会进行分 ...

  5. 使用IDEA基于Maven搭建多模块聚合工程(springmvc+spring+mybatis整合)

    文章有不当之处,欢迎指正,如果喜欢微信阅读,你也可以关注我的微信公众号:好好学java,获取优质学习资源. 终于有时间搞java了,今天使用IDEA基于maven搭建了多模块聚合工程,经过了多番尝试, ...

  6. 若依微服务版怎样在common-core模块下引用第三方lib的jar包(MobileIMSDK4J_tcp的jar包)

    场景 若依微服务版手把手教你本地搭建环境并运行前后端项目: https://blog.csdn.net/BADAO_LIUMANG_QIZHI/article/details/109363303 在上 ...

  7. Maven搭建多模块企业级项目+SSM框架搭建

    一.开发环境: 0.Eclipse Java EE IDE for Web Developers:  /Version: 2018-09 (4.9.0)  /  Build id: 20180917- ...

  8. Maven构建多模块web项目(IDEA)

    title: Maven构建多模块web项目(IDEA) 项目结构 dangmanager => 父模块 manager_common => 公共模块(如工具类) manager_pojo ...

  9. Maven 管理多模块应用

    Maven 管理多模块应用的实现是互联网项目中多使用分布式开发,那么每个独立的服 务都会使用独立的项目进行维护,那么这样就需要使用多模块应用管理,来实现项目的高度 统一. 1.创建 Project 为 ...

  10. maven项目多模块

    maven项目-多模块 1.maven项目模块介绍 1.1 各个模块作用 1.2 maven项目划分为多模块的好处: 2.各个模块的创建 2.1 maven-parent 2.2 maven-dao ...

最新文章

  1. 微服务部署:蓝绿部署、滚动部署、灰度发布、金丝雀发布
  2. 微信小程序界面跳转(2)——按钮
  3. 2022.2.17自制辣白菜
  4. dubbo源码解析-zookeeper创建节点
  5. 【渝粤题库】国家开放大学2021春1283社会保障学(本)题目
  6. 3-3.HDFS项目实战目标和要求
  7. python numpy loadtxt
  8. java自由布局_java怎么在界面上随意摆放位置?
  9. 博格和他的先锋集团创业史(完整版)
  10. xp系统访问网络共享服务器,XP系统打开网络和共享中心的两种方法
  11. 详解LDC架构-设计业务异地多活架构
  12. unity摄像机环绕物体旋转
  13. redis系列---让人懵逼的七连问
  14. 医保局:医保政策性利好消息!
  15. 字节跳动发布独立业务品牌「大力教育」,陈林出任CEO
  16. AAAI2021会议马上开放注册了!注意截稿时间!
  17. 安霸CV1 SOC芯片
  18. 游戏开发第13课-cocoscreator 实现倒水
  19. java中available用法,java – 使用available()时没有获取整个数据
  20. 26个咨询顾问常用的分析模型

热门文章

  1. java代码实现雷达图_雷达图的一种实现! Cocos Creator !
  2. java单例接口_JAVA单例模式
  3. 条形码技术应用属于计算机系统的,条形码技术在现代物流系统中的应用
  4. 浅谈 Mousewheel 事件
  5. QtableView点击滑动设计
  6. 旭日x3派,手势识别之Momo Quanghuang学习记录
  7. Linux的远程传输文件scp及出现Permission denied (publickey).lost connection问题解决方法
  8. Xshell6 Xftp6 破解
  9. rgb sw 线主板接口在哪_火力升级 华硕B460重炮手PRO主板豪横上市_搜狐汽车
  10. 【墨墨英语单词库免费开源无偿分享】小学、初中、高中、大学四六级专四专八、考研、托福、雅思等词书文本大合集