在最终战中打包一个Maven转换的web.xml

Package a Maven-transformed web.xml in the final war

我想让 Maven 处理 web.xml 文件,然后将其包含在最终 war 中。这将取决于配置文件,因此编辑源 XML 不是一个选项。

我正在使用 xml-maven-plugin 将新元素添加到文件中(您可以在这个问题中获得更多详细信息),并成功实现它,让插件将转换后的文件放入 target/generated-resources/xml/xslt 中(我猜这是一个默认的目标目录)。

现在我需要指示 Maven 在打包应用程序时获取转换后的文件(而不是 src/main/webapp/WEB-INF/ 中的那个)。

但我被困在这里,我不知道如何走得更远。

附带说明,我将 xml-maven-plugin 绑定到 process-resources 阶段。
整个插件配置如下。

请随意建议其他文件夹结构、配置更改,或者即使这不是正确的方法等等 - 这是一个测试设置,我正在使用它来学习 Maven。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
    <profile>
        <id>release-production</id>
       
        true</activeByDefault></activation>
        <build>
            <plugins>
                <plugin>
                    <groupId>org.codehaus.mojo</groupId>
                    xml-maven-plugin</artifactId>
                    <version>1.0</version>
                    <executions>
                        <execution>
                            <goals>
                                <goal>transform</goal>
                            </goals>
                             <phase>process-resources</phase>
                        </execution>
                    </executions>

                    <configuration>
                        <transformationSets>
                            <transformationSet>
                                <dir>src/main/webapp/WEB-INF</dir>
                                <includes>
                                    <include>web.xml</include>
                                </includes>
                                <stylesheet>src/main/resources-xml/webxml-transform.xsl</stylesheet>
                            </transformationSet>
                        </transformationSets>
                    </configuration>
                </plugin>
            </plugins>
        </build>
    </profile>

我已经看到了问题的答案:How to transform web.xml during packaging with maven?,但是我需要将整个 XML 元素添加到 web.xml,所以我猜这里使用属性不起作用(至少,当我尝试使用 XML 内容定义属性时出现错误。


这比我想象的要容易(尽管我想这可以通过更简单的配置来完成)。
当然,我愿意接受建议。

第一步:为xml转换器配置自定义输出目录

xml-maven-plugin 在其 TransformationSet 元素中有一个(未记录的?)附加属性:<outputDir />(这是我的完整插件配置)。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
<plugin>
    <groupId>org.codehaus.mojo</groupId>
    xml-maven-plugin</artifactId>
    <version>1.0</version>
    <executions>
        <execution>
            <goals>
                <goal>transform</goal>
            </goals>
             <phase>process-resources</phase>
        </execution>
    </executions>

    <configuration>
        <transformationSets>
            <transformationSet>
                <dir>src/main/webapp/WEB-INF</dir>
                <includes>
                    <include>web.xml</include>
                </includes>
                <stylesheet>src/main/resources-xml/webxml-transform.xsl</stylesheet>
                <outputDir>target/generated-resources</outputDir>
            </transformationSet>
        </transformationSets>
    </configuration>
</plugin>

第二步:配置war插件读取另一个web.xml文件

告诉 maven-war-plugin 新的(转换后的)web.xml 文件在哪里:

xml-maven-plugin 绑定到 process-resources 阶段后,我知道转换后的 web.xml 将在打包 war 时出现。

1
2
3
4
5
6
7
<plugin>
    maven-war-plugin</artifactId>

    <configuration>
        <webXml>target/generated-resources/web.xml</webXml>
    </configuration>
</plugin>