Maven使用 | 多模块下的打包问题
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-app
和my-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
- 至于使用
install
或package
,则取决于是否还需要进行进一步代码修改、再打包,如果需要,使用install
可以将打好的可执行jar包(war包或其它形式的包)布署到本地maven仓库
2.3 第二次打包
- 如果上一步已经再顶层目录下执行过
install
,对指定子模块的二次打包只需要在子目录下执行即可(在依赖的其他模块代码不修改的情况下),如果依赖的其他模块代码修改了,则仍需要在顶层目录下进行打包
Maven使用 | 多模块下的打包问题相关推荐
- android ---- 多渠道、多模块下自动化发布maven
最近重构项目,项目中有很多模块会提供给第三方使用.以前的做法是将所用模块打成一个本地aar 包给使用方使用.随着接入方的增加,就会有不同的需求,比如有些接入方只使用模块A,其他模块不再使用.于是在这次 ...
- maven profile filter 线上线下分开打包配置
maven自动选择不同的配置文件打包profile+filter 1. profile: [要点:] activeByDefault默认激活,不用再mvn命令时指定额外参数: [注意:] 使用非默认的 ...
- Maven学习总结(八)——使用Maven构建多模块项目
2019独角兽企业重金招聘Python工程师标准>>> Maven学习总结(八)--使用Maven构建多模块项目 在平时的Javaweb项目开发中为了便于后期的维护,我们一般会进行分 ...
- Maven学习总结(8)——使用Maven构建多模块项目
2019独角兽企业重金招聘Python工程师标准>>> Maven学习总结(八)--使用Maven构建多模块项目 在平时的Javaweb项目开发中为了便于后期的维护,我们一般会进行分 ...
- 使用IDEA基于Maven搭建多模块聚合工程(springmvc+spring+mybatis整合)
文章有不当之处,欢迎指正,如果喜欢微信阅读,你也可以关注我的微信公众号:好好学java,获取优质学习资源. 终于有时间搞java了,今天使用IDEA基于maven搭建了多模块聚合工程,经过了多番尝试, ...
- 若依微服务版怎样在common-core模块下引用第三方lib的jar包(MobileIMSDK4J_tcp的jar包)
场景 若依微服务版手把手教你本地搭建环境并运行前后端项目: https://blog.csdn.net/BADAO_LIUMANG_QIZHI/article/details/109363303 在上 ...
- Maven搭建多模块企业级项目+SSM框架搭建
一.开发环境: 0.Eclipse Java EE IDE for Web Developers: /Version: 2018-09 (4.9.0) / Build id: 20180917- ...
- Maven构建多模块web项目(IDEA)
title: Maven构建多模块web项目(IDEA) 项目结构 dangmanager => 父模块 manager_common => 公共模块(如工具类) manager_pojo ...
- Maven 管理多模块应用
Maven 管理多模块应用的实现是互联网项目中多使用分布式开发,那么每个独立的服 务都会使用独立的项目进行维护,那么这样就需要使用多模块应用管理,来实现项目的高度 统一. 1.创建 Project 为 ...
- maven项目多模块
maven项目-多模块 1.maven项目模块介绍 1.1 各个模块作用 1.2 maven项目划分为多模块的好处: 2.各个模块的创建 2.1 maven-parent 2.2 maven-dao ...
最新文章
- 微服务部署:蓝绿部署、滚动部署、灰度发布、金丝雀发布
- 微信小程序界面跳转(2)——按钮
- 2022.2.17自制辣白菜
- dubbo源码解析-zookeeper创建节点
- 【渝粤题库】国家开放大学2021春1283社会保障学(本)题目
- 3-3.HDFS项目实战目标和要求
- python numpy loadtxt
- java自由布局_java怎么在界面上随意摆放位置?
- 博格和他的先锋集团创业史(完整版)
- xp系统访问网络共享服务器,XP系统打开网络和共享中心的两种方法
- 详解LDC架构-设计业务异地多活架构
- unity摄像机环绕物体旋转
- redis系列---让人懵逼的七连问
- 医保局:医保政策性利好消息!
- 字节跳动发布独立业务品牌「大力教育」,陈林出任CEO
- AAAI2021会议马上开放注册了!注意截稿时间!
- 安霸CV1 SOC芯片
- 游戏开发第13课-cocoscreator 实现倒水
- java中available用法,java – 使用available()时没有获取整个数据
- 26个咨询顾问常用的分析模型
热门文章
- java代码实现雷达图_雷达图的一种实现! Cocos Creator !
- java单例接口_JAVA单例模式
- 条形码技术应用属于计算机系统的,条形码技术在现代物流系统中的应用
- 浅谈 Mousewheel 事件
- QtableView点击滑动设计
- 旭日x3派,手势识别之Momo Quanghuang学习记录
- Linux的远程传输文件scp及出现Permission denied (publickey).lost connection问题解决方法
- Xshell6 Xftp6 破解
- rgb sw 线主板接口在哪_火力升级 华硕B460重炮手PRO主板豪横上市_搜狐汽车
- 【墨墨英语单词库免费开源无偿分享】小学、初中、高中、大学四六级专四专八、考研、托福、雅思等词书文本大合集