8

我有一个 Java Web 应用程序,其中在标准 webapp 源目录(src/main/webapp)中有一些文件夹,我不想复制到战争中(explodedpackaged)。

我不希望复制这些文件的原因之一是我们在爆炸战争中对 .js 和 .css 文件运行 YUI JS 和 CSS 最小化器和压缩器。我要排除的文件在压缩阶段会产生错误。我不希望他们加入战争的另一个原因是他们支持测试存在于 webapp 中的单页 JS 应用程序(它们是依赖于node/的客户端 JS 测试脚本angular.js)。

以下是来自的相关部分POM.xml

<plugin>
  <groupId>org.apache.maven.plugins</groupId>
  <artifactId>maven-war-plugin</artifactId>
  <version>2.1.1</version>
  <executions>
    <execution>
      <id>parent-resources</id>
      <configuration>
        <failOnMissingWebXml>false</failOnMissingWebXml>
        <overlays>
        </overlays>
        <webappDirectory>${project.build.directory}/${project.build.finalName}-work</webappDirectory>
      </configuration>
      <phase>generate-sources</phase>
      <goals>
        <goal>exploded</goal>
      </goals>
    </execution>
  </executions>
</plugin>

我曾尝试使用warSourceExcludes排除某些路径,但没有成功。下面显示了我的使用示例,下面client/是一个文件夹src/main/webapp

<configuration>
  ...
  <warSourceExcludes>
    <excludes>
      <exclude>
        client/
      </exclude>
    </excludes>
  </warSourceExcludes>
  ...
</configuration>

将 Web 应用程序源目录中的某些路径和/或单个文件排除在爆炸战争中的正确方法是什么?

更新

根据@maba 的建议,我将配置更新如下:

<configuration>
  <failOnMissingWebXml>false</failOnMissingWebXml>
  <overlays>
  </overlays>                                 
  <webappDirectory>${project.build.directory}/${project.build.finalName}-work</webappDirectory>
  <warSourceExcludes>client/</warSourceExcludes>
</configuration>

文件夹 ,client/仍在被复制。有任何想法吗?

4

4 回答 4

9

感谢@alexksandr 和@maba 的回答——虽然正确并没有完全解决我的问题。

解决方案似乎是 - 尽管我不确定为什么会这样 - 配置部分在放置在该execution部分中时没有被拾取。

采用我原来的 pom.xml 并对其进行重构以使其工作给出:

<plugin>
  <groupId>org.apache.maven.plugins</groupId>
  <artifactId>maven-war-plugin</artifactId>
  <version>2.1.1</version>
  <configuration>
    <failOnMissingWebXml>false</failOnMissingWebXml>
    <overlays>
    </overlays>
    <webappDirectory>${project.build.directory}/${project.build.finalName}-work</webappDirectory>
    <warSourceExcludes>client/</warSourceExcludes>
  </configuration>
  <executions>
    <execution>
      <id>parent-resources</id>
      <phase>generate-sources</phase>
      <goals>
        <goal>exploded</goal>
      </goals>
    </execution>
  </executions>
</plugin>

重要的细节似乎是配置应该在插件的顶层,而不是在该execution部分中——尽管很明显xml,我第一次尝试使用warSourceExcludes时偏离了目标(请参阅更新部分之前的原始问题)。

于 2012-11-05T16:37:14.060 回答
3

我找不到有效的 <warSourceExcludes> 配置,但是 <packagingExcludes> 确实有效:

  <plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-war-plugin</artifactId>
    <version>2.5</version>
    <configuration>
      <packagingExcludes>excludeMe/**</packagingExcludes>
    </configuration>
  </plugin>
于 2014-10-30T14:03:14.860 回答
1

warSourceExcludes错了。以下是maven-war-plugin关于warSourceExludes

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

所以在你的情况下,你的配置应该是这样的:

<configuration>
  ...
  <warSourceExcludes>client/</warSourceExcludes>
  ...
</configuration>

这也意味着,如果您想添加更多排除项,只需将它们用逗号分隔即可:

<configuration>
  ...
  <warSourceExcludes>client/,otherDir/,evenMoreDir/</warSourceExcludes>
  ...
</configuration>
于 2012-11-05T10:51:01.173 回答
1

为了从文件夹中排除所有文件,请使用这样的通配符client/**

<configuration>
 <failOnMissingWebXml>false</failOnMissingWebXml>
 <overlays>
 </overlays>                                 
 <webappDirectory>${project.build.directory}/${project.build.finalName}-work</webappDirectory>
 <warSourceExcludes>client/**</warSourceExcludes>
</configuration>
于 2012-11-05T12:09:38.017 回答