IDEA MAVEN项目多个module,使用tomcat热部署
1、背景
项目使用maven多模块构建,线上使用tomcat发布。一个模块为maven web项目,其余均为非web。发布时其余几个模块作为web模块的依赖引入,一起打包发布。
2、问题
使用idea+tomcat进行开发,实现热部署功能。tomcat发布过程中可选择war 和 war exploded两种模式。开发环境使用war exploded实现热部署。
问题1:研发环境只有web模块一个war exploded包可选,配置好tomcat启动后查看发布包里面内容依赖的几个子模块的class及配置文件均未打包进去进行发布。
问题2:线上环境使用war打包,在idea命令行窗口构建完成后,生成的war包将子模块以jar包的形式放到lib中进行发布。会造成子模块中的bean无法初始化,且不好进行增量抽取上线。
3、解决办法
针对问题1:
在idea的tomcat配置发布选项页中选择对应的war exploded包后,选择状态下点击编辑按钮。如下图红色按钮所示,在编辑窗口中选择图2中1处的classes,会显示当前web模块(3标识,其余为添加后的内容)的编译输出,全部模块在右侧区域显示。点击添加(2标识),弹出的图3所示内容选择Module Output,选中其他需要加入的module即可。
图1
图2
图3
针对问题2:
使用maven-dependency-plugin插件,对依赖子module在构建时进行unpack将jar包内容输出到指定目录即可。实现方式为在web module的pom.xml中新增如下配置。其中groupId,artifactId,version按照依赖的子module实际名称配置即可。outputDirectory指定解包的目录;includes指定需要输出到outputDirectory中的文件类型。其他配置及使用可自行查阅官方教程--》maven-dependency-plugin插件使用。
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-dependency-plugin</artifactId>
<version>3.1.1</version>
<executions>
<execution>
<phase>generate-resources</phase>
<goals>
<goal>unpack</goal>
</goals>
<configuration>
<artifactItems>
<artifactItem>
<groupId>X.Y</groupId>
<artifactId>aaa-bbb</artifactId>
<version>${project.version}</version>
<type>jar</type>
<overWrite>true</overWrite>
<outputDirectory>.\target\classes</outputDirectory>
<includes>**/*.class,**/*.xml,**/*.properties,**/*.txt</includes>
</artifactItem>
</artifactItems>
</configuration>
</execution>
</executions>
</plugin>