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

时间:2014-09-21 14:41:54

标签: xml maven

我想让Maven在将web.xml文件包含在最终 war 中之前对其进行处理。这将取决于配置文件,因此编辑源XML不是一种选择。

我使用xml-maven-plugin将新元素添加到文件中(您可以在this question中获取其他详细信息),并且已成功实现它,让插件进行转换target/generated-resources/xml/xslt中的文件(我想这是一个默认的目标目录)。

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

但是我被困在这里,我不知道该怎么走。

作为旁注,我将xml-maven-plugin绑定到process-resources阶段。 整个插件配置在最后。

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

    <profile>
        <id>release-production</id>
        <activation>
        <activeByDefault>true</activeByDefault></activation>
        <build>
            <plugins>
                <plugin>
                    <groupId>org.codehaus.mojo</groupId>
                    <artifactId>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>

我已经看到问题的answerHow to transform web.xml during packaging with maven?,但是我需要将整个XML元素添加到web.xml,所以我想使用属性不会工作在这里(至少,当我尝试使用XML内容定义属性时,我遇到了错误。)

1 个答案:

答案 0 :(得分:0)

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

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

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

<plugin>
    <groupId>org.codehaus.mojo</groupId>
    <artifactId>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 阶段后,我知道当 war 打包时,已转换的web.xml将会存在

<plugin>
    <artifactId>maven-war-plugin</artifactId>

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