【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>
同理,你可以在打包时过滤掉项目中的其他配置文件。