Maven war包相互依赖

假设有两个war包:A和B。A又依赖于B。根据Java规范,classpath不能指定WAR文件。这就意味着在编译时,A项目无法访问B项目中定义的类,所以在A项目中,我们不能像常规类组件那样扩展或使用B定义的类。要解决这一问题,我们必须重新设置maven-war-plugin的一项缺省配置,该设置如下面所示。

将以下配置添加到B项目的Maven pom.xml文件中。

<build>

  <plugins>

    <plugin>

      <artifactId>maven-war-plugin</artifactId>

      <configuration>

        <!-- 把class打包jar作为附件 -->
<attachClasses>true</attachClasses>
<!-- 将项目的类文件打成jar放到lib目录中
<archiveClasses>true</archiveClasses>
-->

      </configuration>

    </plugin>

  <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合并在一起。


你可能感兴趣的:(Maven war包相互依赖)