如何排除文件被maven复制到爆炸的战争中

时间:2012-11-05 10:14:12

标签: maven war

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

我不希望这些文件复制的原因之一是我们运行YUI JS& CSS minimalizer&爆炸战争中的.js和.css文件压缩器。我想要排除的文件在压缩阶段产生错误。我不希望他们加入战争的另一个原因是他们支持测试位于webapp中的单页JS应用程序(它们是依赖于packaged / 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> 排除某些路径,但未成功,但无济于事。我的使用示例如下所示,其中warSourceExcludesclient/正下方的文件夹:

src/main/webapp

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

更新

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

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

文件夹<configuration> <failOnMissingWebXml>false</failOnMissingWebXml> <overlays> </overlays> <webappDirectory>${project.build.directory}/${project.build.finalName}-work</webappDirectory> <warSourceExcludes>client/</warSourceExcludes> </configuration> 仍在复制中。有什么想法吗?

4 个答案:

答案 0 :(得分:7)

感谢@alexksandr&amp; @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离目标很远(请参阅更新部分之前的原始问题)。

答案 1 :(得分:3)

我找不到&lt; warSourceExcludes&gt;的配置哪个有效,但&lt; packagingExcludes&gt;做得好:

  <plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-war-plugin</artifactId>
    <version>2.5</version>
    <configuration>
      <packagingExcludes>excludeMe/**</packagingExcludes>
    </configuration>
  </plugin>

答案 2 :(得分:1)

您的warSourceExcludes错了。以下是maven-war-pluginwarSourceExludes所说的内容:

  

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

因此,在您的情况下,这就是您的配置应该是这样的:

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

这也意味着如果你想添加更多的排除,只需用逗号分隔它们:

<configuration>
  ...
  <warSourceExcludes>client/,otherDir/,evenMoreDir/</warSourceExcludes>
  ...
</configuration>

答案 3 :(得分:1)

要从文件夹中排除所有文件,请使用通配符,例如client/**

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