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