【问题标题】:maven2: excluding directory from WARmaven2:从 WAR 中排除目录
【发布时间】:2010-09-20 09:37:31
【问题描述】:

我尝试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>

有人可以帮忙吗?

【问题讨论】:

  • 只需将其移至其他位置即可。为什么 webscripts 在 webapp 下?

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


【解决方案1】:

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

停用其中一部分的机制是通过&lt;warSourceExcludes&gt; 参数,如下所示:

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

【讨论】:

  • 只是一个补充,如果你想排除几个文件夹,在逗号后面加上,不要使用多个warSourceExcludes,它不会起作用
  • 如何排除多个目录。
【解决方案2】:

warSourceExcludes 似乎没有刚刚重命名为packagingExcludes

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

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

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

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

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

【讨论】:

  • “复制时忽略”是什么意思???如果它们没有被复制到war文件中——它们没有被打包到war文件中,它和packagingExcludes一样。你能解释清楚一点吗?
  • packagingExcludes 不会复制到最终战争,而 warSourceExcludes 不会复制到将被压缩到战争的 warDirectory。
【解决方案3】:

在 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>

【讨论】:

  • 这是不正确的,误导了我一段时间。我使用的是 2.1.1 版,但是 packagingExcludes 不起作用,而 warSourceExcludes 可以。看起来在较新的版本中,packagingExcludes 是要使用的正确标签。
【解决方案4】:

为了删除源文件,我在 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>

【讨论】:

  • 我正在使用 SpringBoot 2.0.3.RELEASE,并且我也在尝试为我的项目创建一个 WAR,该项目具有 angular2 前端和 java rest 后端。我试过这个排除我的 node_modules 文件夹,但没有用。
【解决方案5】:

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

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

这是最终的配置:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2010-12-11
    • 2023-03-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多