我们已经使用war:exploded
一段时间了,我正试图取消它。我已将以下内容添加到我的pom中:
<resource>
<directory>src/main/webapp</directory>
</resource>
这会将src/main/webapp/keystore
中的文件复制到target/classes/keystore
中,以便我的本地用户界面启动器工作并查看所有内容。得分!
但是,通过添加到资源列表,这意味着相同的文件也会在war
文件中显示为keystore
(正确)和 {{1} (错)。这也意味着有一个WEB-INF/classes/keystore
目录(等等)。我正在尝试从WEB-INF/classes/WEB-INF
资源中排除资源文件,因为src/main/webapp
已经是资源。
我正在尝试不要专门排除src/main/webapp/WEB-INF
和其他文件,因为我们会半常添加/删除该列表。我试图将以下(以及许多其他变体)添加到war插件配置中而没有结果:
keystore
我还阅读了其他一些SO问题,我花了至少一个小时从maven war plugin page阅读文档并尝试了其他配置而没有成功。
知道我需要做什么魔术吗?提前谢谢。
答案 0 :(得分:13)
你需要
<plugin>
<artifactId>maven-war-plugin</artifactId>
<version>2.4</version>
<configuration>
<packagingExcludes>**/keystore</packagingExcludes>
</configuration>
</plugin>
另见
答案 1 :(得分:4)
warSourceExcludes为我工作。例如。要从我的战争中排除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>
答案 2 :(得分:1)
但是,通过添加到资源列表,这意味着相同的文件也会在war文件中显示为
keystore
(正确)和WEB-INF/classes/keystore
(错误)。
我 无法能够让war-plugin正确地排除webapp
目录,同时允许webapp/WEB-INF
目录。而不是将以下内容添加到pom:
<!-- bad idea, this didn't work -->
<resource>
<directory>src/main/webapp</directory>
</resource>
我转而使用resources-plugin在validate
阶段复制某些资源:
<plugin>
<artifactId>maven-resources-plugin</artifactId>
<executions>
<execution>
<id>copy-resources</id>
<phase>validate</phase>
<goals>
<goal>copy-resources</goal>
</goals>
<configuration>
<outputDirectory>${basedir}/target/webapp</outputDirectory>
<resources>
<resource>
<directory>src/main/webapp</directory>
</resource>
</resources>
</configuration>
</execution>
</executions>
</plugin>
我最初将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文件中。另外,我在运行时从target/webapp/views/cms
添加了一个符号链接,指向另一个项目中的CMS层次结构。