【1】默认方式将工程打war包
这里不使用maven-war-plugin,使用默认配置安装工程:
安装后本地仓库会有war包:
也就是说,不使用插件的时候,默认的maven web工程打war包和你部署在tomcat时项目一致。
【2】war包调用war包
也就是说,一个maven web工程依赖另外一个maven工程。
假设A依赖B。
这里B的pom.xml如下:
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-war-plugin</artifactId>
<version>2.6</version>
<configuration>
<!--把class打包jar作为附件-->
<attachClasses>true</attachClasses>.
<!--把class打包jar-->
<archiveClasses>true</archiveClasses>
<!-- 下面这句可以不要-->
<classesClassifier>api</classesClassifier>
<!--下面意思为-->
<packagingExcludes>
WEB-INF/lib/*.jar
</packagingExcludes>
</configuration>
</plugin>
这样仓库中会有两个包:war 和jar
war包结构图如下:
- 和你的webapp下目录结构一致
- classes和lib为空(pom.xml配置文件过滤掉了)
jar包结构图如下:
- classes和你的项目配置文件
A工程pom.xml如下:
<dependency>
<groupId>com.corn</groupId>
<artifactId>corn-manager-sys</artifactId>
<version>0.0.1-SNAPSHOT</version>
<type>war</type>
</dependency>
<dependency>
<groupId>com.corn</groupId>
<artifactId>corn-manager-sys</artifactId>
<version>0.0.1-SNAPSHOT</version>
<type>jar</type>
<scope>compile</scope>
<!--如果A中没有定义该名字,那么名字为classes,替代api-->
<classifier>api</classifier>
</dependency>
安装后,B的api.jar(即,打包的class)会作为一个jar包存在于A的lib目录下。
B的webapp下的其他文件和A的webapp下的共存:
如果B和A同时有web.xml,那么保留A的文件。即,如果webapp下文件同名,那么保留A的文件。
需要注意的是,如果你的pom.xml文件中配置了tomcat插件,那么是不会执行安装到仓库的命令的,会直接运行。
<plugin>
<groupId>org.apache.tomcat.maven</groupId>
<artifactId>tomcat7-maven-plugin</artifactId>
<version>2.2</version>
<configuration>
<uriEncoding>UTF-8</uriEncoding>
<port>8080</port>
<path>/</path>
<update>true</update>
</configuration>
<executions>
<execution>
<phase>package</phase>
<goals>
<goal>run</goal>
</goals>
</execution>
</executions>
</plugin>
【3】过滤掉B中的applicationContext.xml
如果你不想要B打包时,将项目配置文件(如applicationContext.xml)一同打入,可以在pom.xml-build中作如下配置:
<resources>
<resource>
<directory>src/main/resources</directory>
<filtering>true</filtering>
<excludes>
<exclude>applicationContext.xml</exclude>
</excludes>
</resource>
</resources>
同理,你可以在打包时过滤掉项目中的其他配置文件。