10

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

<resource>
    <directory>src/main/webapp</directory>
</resource>

这会将诸如 in 之类的文件复制src/main/webapp/keystore到其中,target/classes/keystore以便我的本地 UI 启动器可以正常工作并查看所有内容。分数!

但是,通过添加到资源列表中,这意味着相同的文件也会在war文件中显示为keystore(正确) WEB-INF/classes/keystore(错误)。这也意味着有一个WEB-INF/classes/WEB-INF目录(等等)。我试图从src/main/webapp资源中排除资源文件,因为src/main/webapp/WEB-INF它已经是资源。

我试图不专门排除keystore和其他文件,因为我们半经常地从该列表中添加/删除。我尝试将以下(以及许多其他变体)添加到 war 插件配置中,但没有结果:

<webResources>
   <resource>
      <directory>src/main/webapp</directory>
      <excludes>
         <exclude>**</exclude>
      </excludes>
   </resource>
</webResources>

我还阅读了许多其他 SO 问题,并且我至少花了一个小时从maven war 插件页面阅读文档,并尝试了其他配置但没有成功。

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

4

3 回答 3

13

你需要

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

另见

于 2013-10-03T23:20:05.763 回答
5

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>
于 2016-08-19T16:06:07.203 回答
1

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

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

<!-- bad idea, this didn't work -->
<resource>
    <directory>src/main/webapp</directory>
</resource>

我切换到使用资源插件能够在该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其中,但似乎也将其放入了生成的战争文件中,这是我试图避免的。我觉得如果有必要我可以解决这个问题。

相反,我决定将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");
...

这似乎运作良好。现在可以在本地进行测试(没有战争爆炸!!),并且文件不会双重包含在生成的战争文件中。此外,我在运行时添加了一个符号链接 fromtarget/webapp/views/cms指向另一个项目中的 CMS 层次结构。

于 2013-10-04T19:11:05.450 回答