需求
maven项目同时打war包和jar包,并install到本地仓库
解决方案
使用 maven-jar-plugin ,定义在 phase package 阶段同步打 jar 包;然后在 maven install 时,maven 会将这个 module 的 jar、war同时install到本地repository (此动作是自动完成,有几个就install 几个,无需配置)
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-jar-plugin</artifactId>
<version>2.3.1</version>
<executions>
<execution>
<id>my-jar</id>
<phase>package</phase>
<goals>
<goal>jar</goal>
</goals>
<configuration>
<classifier>api</classifier>
</configuration>
</execution>
</executions>
</plugin>
install问题
如果在 pom 中定义 package 为 war,运行 maven package 后,在项目 target 目录下成功产生 XX.jar 和 XX.war 。
但运行 maven install,却只把 XX.jar 安装到 repositoy 中的XX.war,其中内容仅是 jar 包内容,而XX.jar 就不install 到 repositoy 了。
加入 classifier后缀 后产生: XX-api.jar 和 XX.war,那么maven install 会将这两个文件同时安装到本地 repository 中,不会产生上述问题。
同样的道理,如果项目定义 package jar,同时需要打包 jar 和 war,应该也可以搭配使用 maven-war-plugin 来达成。
webxml问题
如果打war包遇到以下问题,加上failOnMissingWebXml属性值
Error assembling WAR: webxml attribute is required (or pre-existing WEB-INF/web.xml if executing in update mode)
<properties>
<failOnMissingWebXml>false</failOnMissingWebXml>
</properties>