使用maven warpath插件合并多module的war包
现在java 项目一般使用maven、gradle等工具来管理jar包、打包、发布。如果一个项目有很多模块,那般是分成多个module,主目录有个parent,负责包含全部的module,然后目录中多个module文件夹,分别依赖parent或者其他module。最近遇到个项目,项目很久,代码全部放在一起,随着业务拓展变得与越来越庞大,于是其对进行module拆分。
问题
- 多个模块可能交叉依赖。
- 每个模块可能都会有前台页面的代码,jsp、js等。
- maven打包的时候能否war包、jar包一起打。
解决方式
- 交叉依赖必须解决,尽可能多的剥离独立代码,让它成为其他模块以来的包,这个包可以使用maven打成jar包。然后拆分其他的模块,可以有顺序依赖,但是不能交叉依赖。
- 多个模块都有前台代码,前台代码在maven打包是不需要编译,是直接copy到target目录,然后再打成war包。这样我们就可以把所有模块的前台代码都抽离出来,当成一个单独的module,如project-web模块,当然也可以不抽离,但是需要用到第三步。
- 使用maven插件可以做到war、jar一起打。插件名字是maven-jar-plugin。示例pom配置如下(在pom.xml开头中指定打包类型是war):
<build> <plugins> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-jar-plugin</artifactId> <executions> <execution> <id>make-a-jar</id> <phase>compile</phase> <goals> <goal>jar</goal> </goals> </execution> </executions> </plugin> </plugins> </build>
执行mvn install
就可以得到war和jar包,默认是在target文件夹下。
介绍就这些,下面是示例的pom配置,首先parent中的pom.xml(注意parent的打包类型是pom):
<groupId>com.yeetrack.project</groupId> <artifactId>project-parent</artifactId> <version>1.0-SNAPSHOT</version> <packaging>pom</packaging> <name>My Maven Webapp</name> <modules> <module>common</module> <module>module-one</module> <module>module-two</module> <module>module-three</module> </modules>
在各个模块中配置parent项目(下面是module-one):
<groupId>com.yeetrack.project</groupId> <artifactId>module-one</artifactId> <version>1.0-SNAPSHOT</version> <packaging>jar</packaging>/* 如果此模块有前台代码,那就是war */ <name>module-one</name> <parent> <groupId>com.yeetrack.project</groupId> <artifactId>project-parent</artifactId> <version>1.0-SNAPSHOT</version> </parent>