Maven WAR 覆盖 - 将资源合并到不同的路径

Maven WAR overlay - merge resources into a different path

我正在使用 maven 4.0.0。我在 maven-war-plugin 中使用覆盖将 app1 合并到 app2 中。我想将 app1 中的一些目录合并到 app2 中的不同位置。本质上是将 SomeContent 目录中的内容向上移动一级。这可能吗?我需要以某种方式使用 maven-resources-plugin 吗?

以下是 app1 的 war 中有问题的文件:

SomeContent/admin/index.jsp
SomeContent/images/header.png

我想在覆盖后 app2 的 war 中得到这样的文件:

admin/index.jsp    <-- from app1
images/header.png  <-- from app1
app2.jsp           <-- from app2
WEB-INF/...        <-- from app2
...                <-- from app2

app1 的 pom:

<groupId>com.testing</groupId>
<artifactId>app1</artifactId>
<packaging>war</packaging>
...
<plugin>
    <artifactId>maven-war-plugin</artifactId>
    <version>3.2.3</version>
    <configuration>
        <warSourceDirectory>WebContent</warSourceDirectory>
    </configuration>
</plugin>

app2 的 pom:

<groupId>com.testing</groupId>
<artifactId>app2</artifactId>
<packaging>war</packaging>
...
<plugin>
    <artifactId>maven-war-plugin</artifactId>
    <version>3.2.3</version>
    <configuration>
        <warSourceDirectory>WebContent</warSourceDirectory>
        <overlays>
            <overlay>
                <groupId>com.testing</groupId>
                <artifactId>app1</artifactId>
            </overlay>
        </overlays>
    </configuration>
</plugin>

我明白了。覆盖 war 解压到(默认)target/war/work/<groupId>/<artifactId> 目录。所以我在覆盖中排除了我想要的不同路径的目录,并确保覆盖在当前构建之前执行。然后我添加了一个资源来将有问题的目录复制到构建目录中,然后将其添加到我指定路径的 war 中。

<plugin>
    <artifactId>maven-war-plugin</artifactId>
    <version>3.2.3</version>
    <configuration>
        <overlays>
            <overlay>
                <groupId>com.testing</groupId>
                <artifactId>app1</artifactId>
                <excludes>
                    <exclude>SomeContent/**</exclude>
                </excludes>
            </overlay>
            <overlay><!-- empty groupId/artifactId represents the current build --></overlay>
        </overlays>
        <webResources>
            ...
            <resource>
                <directory>target/war/work/com.testing/app1/SomeContent</directory>
            </resource>
        </webResources>
    </configuration>
</plugin>