maven2:从WAR中排除目录

时间:2010-09-20 09:37:32

标签: maven-2 maven maven-war-plugin

我尝试this从我的WAR文件中排除整个目录($ {basedir} / src / main / webapp / webscripts)但它失败了。有什么问题?

这不起作用:

<configuration>
   <webResources>
      <resource>
       <directory>${basedir}/src/main/webapp/webscripts</directory>
       <excludes>
        <exclude>**/*.*</exclude>
       </excludes>
      </resource>
   </webResources>
</configuration>

这也是:

<configuration>
   <webResources>
      <resource>
       <directory>${basedir}/src/main/webapp</directory>
       <excludes>
        <exclude>**/webscripts</exclude>
       </excludes>
      </resource>
   </webResources>
</configuration>

有人可以帮忙吗?

5 个答案:

答案 0 :(得分:87)

您的两个解决方案都无济于事,因为它们会添加一个随后停用的其他资源。默认情况下会复制webapp源文件夹,而不使用资源机制。

停用其中一部分的机制是通过<warSourceExcludes>参数,如下所示:

<plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-war-plugin</artifactId>
    <version>2.1</version>
    <configuration>
        <warSourceExcludes>webscripts/**</warSourceExcludes>
    </configuration>
</plugin>

答案 1 :(得分:31)

warSourceExcludes 似乎没有被重命名为 packagingExcludes

  

warSourceExcludes :复制warSourceDirectory内容时要排除的逗号分隔的标记列表。

     

packagingExcludes :包装前要从WAR中排除的逗号分隔的标记列表。此选项可用于实施   瘦的WAR用例。

有一个很大的区别:使用 packagingExcludes ,令牌完全被排除在最终的war文件之外。使用 warSourceExcludes 时,只有在将war目录复制到war文件时才会忽略标记。 因此,如果代币存在于 webappDirectory 中,则在使用 warSourceExcludes 时不会忽略它们,但在使用 packagingExcludes 时将不会忽略它们

一个有效的语法示例:

<warSourceExcludes>**/${project.artifactId}/**</warSourceExcludes>

答案 2 :(得分:6)

在版本2.1-alpha-1中,这被错误地命名为warSourceExcludes。正确的参数是packagingExcludes

使用示例(从WAR中排除WEB-INF / statics /文件夹):

<plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-war-plugin</artifactId>
    <version>2.1.1</version>
    <configuration>
        <warName>searchservice-web</warName>
        <packagingExcludes>WEB-INF/statics/</packagingExcludes>
    </configuration>
</plugin>

答案 3 :(得分:4)

Project Structure

为了删除我在maven中使用以下配置的源文件

 <plugin>
    <artifactId>maven-war-plugin</artifactId>
    <version>3.2.0</version>
    <configuration>
      <packagingExcludes>
        eb-app/app/**,eb-app/node_modules/**,eb-app/public/**,eb-app/server/**,eb-app/tests/**,eb-app/tmp/**,eb-app/vendor/**,eb-app/*
      </packagingExcludes>
    </configuration>
  </plugin>

答案 4 :(得分:1)

有一个场景,我必须排除两个可以由*scripts匹配的文件夹,它们位于资源文件夹中。第一个困惑是是否将排除值提供为src/main/resources/*scriptsWEB-INF/classes/*scripts,即编辑前后的结构。

提供/**以从war文件中排除整个目录非常重要。就我而言,*scripts/**

这是最终的配置:

    <packagingExcludes>WEB-INF/classes/*scripts/**</packagingExcludes>