如何从maven war插件war文件中排除某些资源?

如何从maven war插件war文件中排除某些资源?,maven,war,Maven,War,我们已经使用了一段时间了,现在我正在尝试取消它。我已将以下内容添加到我的pom中: <resource> <directory>src/main/webapp</directory> </resource> 我还阅读了许多其他SO问题,我至少花了一个小时阅读了来自的文档,并尝试了其他配置,但没有成功 知道我需要在这里做什么吗?提前谢谢。您需要 <plugin> <artifactId>maven-war-p

我们已经使用了一段时间了,现在我正在尝试取消它。我已将以下内容添加到我的pom中:

<resource>
    <directory>src/main/webapp</directory>
</resource>
我还阅读了许多其他SO问题,我至少花了一个小时阅读了来自的文档,并尝试了其他配置,但没有成功

知道我需要在这里做什么吗?提前谢谢。

您需要

<plugin>
    <artifactId>maven-war-plugin</artifactId>
    <version>2.4</version>
    <configuration>
        <packagingExcludes>**/keystore</packagingExcludes>
    </configuration>
</plugin>



但是,通过添加到资源列表,这意味着war文件中也会显示相同的文件,如
keystore
(正确)和
WEB-INF/classes/keystore
(错误)

我无法让war插件正确地排除
webapp
目录,同时允许
webapp/WEB-INF
目录。而不是将以下内容添加到pom中:

<!-- bad idea, this didn't work -->
<resource>
    <directory>src/main/webapp</directory>
</resource>
我最初将
webapp
目录复制到
target/classes
中,但这似乎也将其复制到生成的war文件中,这正是我试图避免的。我觉得如果必要的话,我可以解决这个问题

相反,我决定将
webapp
文件复制到
target/webapp
目录中,并更改程序以查找其中的资源:

String RESOURCE_BASE = "target/webapp";
System.setProperty("server.jetty.webapp.resourceBase", RESOURCE_BASE + "/");
System.setProperty("server.jetty.ssl.keystore", RESOURCE_BASE + "/keystore");
System.setProperty("server.jetty.ssl.truststore", RESOURCE_BASE + "/keystore");
...

这似乎很有效。本地测试现在可以工作了(没有war分解!!),并且生成的war文件中不会双重包含这些文件。此外,我在运行时从
target/webapp/views/cms
添加了一个符号链接,指向另一个项目中的cms层次结构。例如,要从我的war中排除js文件夹和scss文件夹,我尝试

 <configuration>
   <warSourceExcludes>js/*.*,scss/*.*</warSourceExcludes>      
   <webResources>
     <resource>
     <directory>src/main/webapp</directory>
     <filtering>true</filtering>
        <includes>
            <include>WEB-INF/web.xml</include>
        </includes>
     </resource>
   </webResources>
</configuration>

js/*.*,scss/*.*
src/main/webapp
真的
WEB-INF/WEB.xml

谢谢您的帮助。我试图“不特别排除keystore和其他文件”,比如post states。有什么方法可以排除特定的重叠资源目录吗?只需将
**/keystore
替换为所需的模式即可。该模式可以是CSV,以防您仍然感到困惑。我这里有一个简单的例子:它只显示了一个特定的属性文件和一个日志配置文件。我第一次发现Maven文档中更密集的表达式也有点让人困惑。把keystore目录移到/src/main/resources而不是/src/main/webapp怎么样?然后maven resources插件将处理复制到target/classes/keystore中。
keystore
是一个文件@user944849。我可以这样做,但我认为这将在其他方面打破这场战争。从war插件的角度来看,webapp的布局是一本教科书:我想我肯定错过了什么。问题是密钥库文件应该位于war的顶层(密钥库),而不是war的典型位置(WEB-INF/classes/keystore)。因此,您希望做一些与教科书中的war插件方法稍有不同的事情。在Maven中实现要求的方法是将文件放在/src/main/resources中。因此,如果您谈论的是wars@user944849,那么web资源通常放在src/main/webapp中。这就是密钥库文件所在的位置,它被(适当地)复制到war类路径的根目录中。
String RESOURCE_BASE = "target/webapp";
System.setProperty("server.jetty.webapp.resourceBase", RESOURCE_BASE + "/");
System.setProperty("server.jetty.ssl.keystore", RESOURCE_BASE + "/keystore");
System.setProperty("server.jetty.ssl.truststore", RESOURCE_BASE + "/keystore");
...
 <configuration>
   <warSourceExcludes>js/*.*,scss/*.*</warSourceExcludes>      
   <webResources>
     <resource>
     <directory>src/main/webapp</directory>
     <filtering>true</filtering>
        <includes>
            <include>WEB-INF/web.xml</include>
        </includes>
     </resource>
   </webResources>
</configuration>