在 EAR 中可包含多个 WAR 包,WAR 中有包含着 lib 目录,因为存放其依赖的第三方 JAR 包。若是多个 WAR 包,WAR 包与 EJB-JAR 包的依赖之间存在这重叠,便会形成浪费。若是应用较大,依赖较多,那还会形成比较严重的磁盘资源的浪费和部署时的不便。maven
解决这个问题的一个方法就是在打 WAR 包的时候不建立 lib 目录,而经过修改 manifest.mf 文件的 Class-Path 部分,让其依赖 EAR 包 lib 目录下的第三方 JAR 包。经过配置 Maven WAR Plugin,就可实现这个目的。具体配置以下:spa
<!-- lang: xml --> <plugin> <artifactId>maven-war-plugin</artifactId> <version>${version.war.plugin}</version> <configuration> <packagingExcludes>WEB-INF/lib/*.jar</packagingExcludes> <archive> <manifest> <addClasspath>true</addClasspath> <classpathPrefix>lib/</classpathPrefix> </manifest> </archive> </configuration> </plugin>
其中 <archive> 的配置实际上是经过 Maven Archiver,这是一个被不少 Maven 插件使用的通用项目。更多配置请参见 Maven Archiver 的文档。插件