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

时间:2013-10-03 20:04:17

标签: maven war

我们已经使用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阅读文档并尝试了其他配置而没有成功。

知道我需要做什么魔术吗?提前谢谢。

3 个答案:

答案 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层次结构。