假设有两个war包:A和B。A又依赖于B。根据Java规范,classpath不能指定WAR文件。这就意味着在编译时,A项目没法访问B项目中定义的类,因此在A项目中,咱们不能像常规类组件那样扩展或使用B定义的类。要解决这一问题,咱们必须从新设置maven-war-plugin的一项缺省配置,该设置以下面所示。maven
将如下配置添加到B项目的Maven pom.xml文件中。
ide
<build>ui
<plugins>spa
<plugin>插件
<artifactId>maven-war-plugin</artifactId>code
<configuration>xml
<!-- 把class打包jar做为附件 -->
<attachClasses>true</attachClasses>
<!-- 将项目的类文件打成jar放到lib目录中
<archiveClasses>true</archiveClasses>
-->ci</configuration>it
</plugin>io
<plugins>
<build>
启用attachClasses选项能够把JAR文件(warsaw-1.0-classes.jar)和标准的WAR文件同时安装到Maven仓库中。要访问该JAR文件,咱们须要以下所示的那样修改A项目的依赖列表。
<dependencies> <dependency> <groupId>com.example.modular</groupId> <artifactId>B</artifactId> <version>1.0</version> <type>war</type> </dependency> <dependency> <groupId>com.example.modular</groupId> <artifactId>B</artifactId> <version>1.0</version> <type>jar</type> <classifier>classes</classifier> <scope>provided</scope> </dependency> </dependencies>
A项目用B WAR建立最终的Web归档文件,出于编译须要,还使用了B的类(打包在JAR里)。咱们将属性classifier设置为classes,以此定义该从仓库中选择哪一个工件。将scope设置为provided,则是告诉Maven只在编译时须要该工件,运行时则从其余地方得到。“其余地方”就是指B项目的WAR工件,WAR插件会将WAR和JAR合并在一块儿。