46

我试图从我的 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>

有人可以帮忙吗?

4

5 回答 5

92

您的两个解决方案都无济于事,因为它们会添加一个额外的资源,然后将其停用。webapp源文件夹默认复制,没有资源机制。

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

<plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-war-plugin</artifactId>
    <version>2.1</version>
    <configuration>
        <warSourceExcludes>webscripts/**</warSourceExcludes>
    </configuration>
</plugin>
于 2010-09-20T10:12:23.007 回答
32

warSourceExcludes似乎并没有被重命名为packagingExcludes

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

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

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

还有一个有效的语法示例:

<warSourceExcludes>**/${project.artifactId}/**</warSourceExcludes>
于 2012-01-24T03:57:42.880 回答
7

在 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>
于 2011-06-09T11:04:48.297 回答
5

项目结构

为了删除源文件,我在 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>
于 2018-04-13T06:05:53.157 回答
1

有一个场景,我必须排除两个可以匹配的文件夹,*scripts它们位于资源文件夹中。第一个混淆是是否提供排除值 assrc/main/resources/*scripts或 as WEB-INF/classes/*scripts,即编译前或编译后结构。

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

这是有效的最终配置:

    <packagingExcludes>WEB-INF/classes/*scripts/**</packagingExcludes>
于 2014-12-11T09:50:38.197 回答