maven合并打包多个war包

转载 2013年12月06日 10:52:24

在WAR插件的以往版本中,配置并不总是必须的。如果你觉得使用默认设置能很好满足要求,那就继续这么做。但是如果你需要更多的控制,那么你就歹好好看看下面的部分了。

<overlay>元素包含有下列子元素:

  • id -  overlay id。如果你不提供的话,WAR插件将自动生成一个。
  • groupId -  配置你想要覆盖的groupId。
  • artifactId – 配置你想要覆盖的构件的artifactId。 
  • type – 配置你想要覆盖的构件类型。默认值是:war。
  • classifier – 如果有多个构件匹配当前的groupId/artifactId,那么你需要配置构件的classifier以明确覆盖(classifier:该元素用来帮助定义构建输出的一些附属构件)。
  • includes -  要包含的文件。默认情况下,所有文件都能被包含。  
  • excludes – 要排除的文件。默认情况下,在META – INF目录是被排除在外的。
  • targetPath -  在webapp结构的目标相对路径,当然这只在覆盖类型为war时才有效。默认情况下,覆盖的内容都追加在webapp的根节点下。
  • skip – 当设置为true时,跳过本次覆盖。默认值是:false。

说了这么多,还是举实例会比较直观一点。

比如,我要排除我们的documentedprojectdependency.war下的sampleimage-dependency.jpg来覆盖目标war文件:

  …
  <build>
    <plugins>
      <plugin>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-war-plugin</artifactId>
        <version>2.1</version>
        <configuration>
          <overlays>
            <overlay>
              <groupId>com.example.projects</groupId>
              <artifactId>documentedprojectdependency</artifactId>
              <excludes>
                <exclude>WEB-INF/classes/images/sampleimage-dependency.jpg</exclude>
              </excludes>
            </overlay>
          </overlays>
        </configuration>
      </plugin>
    </plugins>
  </build>
  …

4、Overlays的打包

Overlays采用第一直达者优先的策略(因此,如果一个文件被某一个副本覆盖过,则它不会被另一个副本继续覆盖)。

Overlays的应用步骤依照它们在<overlays>配置的顺序。如果没有指定配置,那么它们的依赖关系将按照POM定义的顺序来调用(警告:这有很多的不确定性,特别是在您使用传递性依赖来覆盖的时候)。如果当前项目运用了复合覆盖的情况(即同时包含配置型覆盖和非配置型覆盖),非配置型覆盖应用于配置型覆盖之后。

默认情况下,该项目源(亦称当前构建)遵循按pom.xml上下文中依赖的先后顺序进行追加(如任何覆盖元素已被应用之前)。当前构建定义了一个没有groupId和artifactId的特殊覆盖方式。如果overlays需要应用第一(直达者优先)原则,那么就只需简单地配置当前构建在这些覆盖之后。

例如,假设groupid为com.example.projects的my-webapp是当前项目的一个依赖,而你需要首先应用它,操作如下:

  …
  <build>
    <plugins>
      <plugin>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-war-plugin</artifactId>
        <version>2.1</version>
        <configuration>
          <overlays>
            <overlay>
              <groupId>com.example.projects</groupId>
              <artifactId>my-webapp</artifactId>
            </overlay>
            <overlay>
              <!– 空 groupId/artifactId代表当前构建 –>
            </overlay>
          </overlays>
        </configuration>
      </plugin>
    </plugins>
  </build>
  …

注意:在上述情况下,没有配置在<overlays>元素的其它WAR依赖都会应用在当前构建之后。

如果你想要执行一项更好更精细的覆盖策略,overlays能通过不同的includes/exclude元素进行多重打包。例如,我想要在当前项目中使用my-webapp的 index.jsp覆盖文件,但是my-webapp的其它文件还是按照常规方式来控制,鉴于此,我们必须要为 my-webapp定义两个覆盖配置:

  …
  <build>
    <plugins>
      <plugin>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-war-plugin</artifactId>
        <version>2.1</version>
        <configuration>
          <overlays>
            <overlay>
              <id>my-webapp-index.jsp</id>
              <groupId>com.example.projects</groupId>
              <artifactId>my-webapp</artifactId>
              <includes>
                <include>index.jsp</include>
              </includes>
            </overlay>
            <overlay>
              <!– 空 groupId/artifactId代表当前构建 –>
            </overlay>

<!– 如果有必要的话,就把其它overlays配置在这里 –>

<overlay>
              <id>my-webapp</id>
              <groupId>com.example.projects</groupId>
              <artifactId>my-webapp</artifactId>
            </overlay>
          </overlays>
        </configuration>
      </plugin>
    </plugins>
  </build>
  …

 5、Overlay全局设置

下面的设置能指定全局性的Overlay和修改所有Overlay的应用方式。

  • dependentWarIncludes -  设置此包含默认值适用于所有的overlay。没有指定includes元素的overlay都将继承此默认设置。

    …
    <plugins>
      <plugin>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-war-plugin</artifactId>
        <version>2.1</version>
        <configuration>
          <dependentWarIncludes>**/IncludeME,**/images</dependentWarIncludes>
        </configuration>
       </plugin>
    </plugins>
    …

  • dependentWarExcludes -  设置此排除默认值适用于所有的overlay。没有指定excludes元素的overlay都将继承此默认设置。

    …
    <plugins>
      <plugin>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-war-plugin</artifactId>
        <version>2.1</version>
        <configuration>
          <dependentWarExcludes>WEB-INF/web.xml,index.*</dependentWarExcludes>
        </configuration>
       </plugin>
    </plugins>
    …

  • workDirectory – 设置overlays临时提取的目录。

    …
    <plugins>
      <plugin>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-war-plugin</artifactId>
        <version>2.1</version>
        <configuration>
          <!– default value is target/war/work –>
          <workDirectory>/tmp/extract_here</workDirectory>
        </configuration>
       </plugin>
    </plugins>
    …

  • useCache – 设置true时,能启用webapp架构缓存。默认值:false。

    …
    <plugins>
      <plugin>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-war-plugin</artifactId>
        <version>2.1</version>
        <configuration>
          <useCache>true</useCache>
        </configuration>
       </plugin>
    </plugins>
    …

6、ZIP依赖的覆盖

要想使一个zip依赖作为一个覆盖,你必须在插件配置中指定它。例如你要在Web应用的scripts目录下通过一个zip覆盖注入内容,操作如下:

    …
    <plugins>
      <plugin>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-war-plugin</artifactId>
        <version>2.1</version>
        <configuration>
          <overlays>
            <overlay>
              <groupId>zipGroupId</groupId>
              <artifactId>zipArtifactId</artifactId>
              <type>zip</type>
              <targetPath>scripts</targetPath>
            </overlay>
          </overlays>
        </configuration>
      </plugin>
    </plugins>
    …

三、参考资料

1、http://maven.apache.org/plugins/maven-war-plugin-2.1-alpha-2/overlays.html

2、http://maven.apache.org/plugins/maven-war-plugin/overlays.html

相关文章推荐

Maven中如何配置WAR依赖WAR包

项目背景: 1.     war项目C和war项目B都依赖war项目A和JAR项目D. 项目A中保存了B和C项目通用的web资源,比如通用的javascript,CSS,jsp等. 项目D中保存...

eclipse maven 打war包的两种方式

第一种:利用pom.xml文件打包。 右键pom.xml文件,选择Debug as或Run as 都行。但需要选择Maven install  打包  执行成功后,日志会打印出位置(看自己...

Maven build多个war包合并

com.jeeplus jeeplus-cert-web 1.0.0 war jeeplus-base-web org.apac...

maven 多模块多Web应用合并War包

maven 多模块多Web应用合并War包是根据我上一章的分模块分工程管理的内容基础之上来写的,如果要看这部分内容需要结合上一章“maven 分模块分工程管理”来着手。 我这个工程分为一个顶级父工程和...

使用Maven assembly打多个自定义包及War包简介

一.Maven基本命令 创建java项目: mvn archetype:create -DarchetypeGroupId=org.apache.maven.archetypes -Dgrou...

Maven 多个web合并打包部署

在一个大项目中拆分maven工程时,通常会根据业务模块进行拆分。无论怎么划分,往往每个模块又需要集成权限管理orm或者说依赖 静态资源web公共模块。而为了避免资源的浪费,或者是希望一次登录,可以访问...
  • xlxxcc
  • xlxxcc
  • 2016年08月30日 11:23
  • 3192

使用maven整合多个web项目,多个war合并

在项目管理的过程中,初期可能一个项目并不大,所以建立了一个独立的web项目,但随着项目的发展,业务功能越来越多,但从业务依赖的角度来说,却是可以划分为多项目的。于是需要将这个庞大的web项目拆分成一个...
  • xpsharp
  • xpsharp
  • 2014年04月06日 15:48
  • 22360

一个多maven项目聚合的实例

本文介绍一个多maven项目的实例demo,展示了聚合、继承、工程依赖、单元测试、多war聚合、cargo发布等场景  一、工程介绍  该项目由5个maven项目组成    t...

如何将一个JavaEE项目打包成War文件

一个JavaEE项目完成后,一般我们需要将项目发布到服务器,例如最简单的:Tomcat。 将JavaEE项目直接放到Tomcat的webapps文件夹下是最差的一种方式,一般我们会选择将项目打包成Wa...

pndaox不再需要写mybatis的SQL

之前有个同事在抱怨,最烦写mybatis的SQL语句了,表中新增一个字段还要特意处理一下,动不动还会留一些问题在上面。没错,那位同事就是——ME。之前在Google,寻找的方向是怎么解决mybatis...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:maven合并打包多个war包
举报原因:
原因补充:

(最多只允许输入30个字)