maven-replacer-plugin用于替换构建中的令牌而不是源代码

时间:2016-08-23 15:44:29

标签: maven replace maven-3 maven-war-plugin

我在maven-replacer-plugin中尝试使用web.xml来替换我在<plugin> <groupId>com.google.code.maven-replacer-plugin</groupId> <artifactId>replacer</artifactId> <version>1.5.2</version> <executions> <execution> <phase>prepare-package</phase> <goals> <goal>replace</goal> </goals> </execution> </executions> <configuration> <file>${project.basedir}/src/main/webapp/WEB-INF/web.xml</file> <replacements> <replacement> <token>@@sec.level@@</token> <value>local</value> </replacement> </replacements> </configuration> </plugin> 中的令牌,当它在WAR文件中构建而不在源文件中时,这会删除后续构建的令牌并显示文件相对于版本控制存储库已更改。

目前,我只能更改源中的文件,这不符合我的要求:

attributes:['NameOfColumn1','NameOfColumn2', etc.]

问题:我如何运行替换器只更改WAR包中的文件,同时保持源不变,以便后续构建?

1 个答案:

答案 0 :(得分:3)

您可以使用maven-war-plugin的{​​{3}}目标访问临时文件夹(例如,实际上在target下创建的任何内容),以及稍后将成为其中一部分的爆炸版本最终war文件,然后在此文件上执行replacer插件(安全副本,与使用该文件的其他插件不冲突)。

这种方法实际上也由exploded

记录

即具有类似的配置:

<plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-war-plugin</artifactId>
    <version>2.6</version>
    <configuration>
        <useCache>true</useCache>
    </configuration>
    <executions>
        <execution>
            <id>prepare-war</id>
            <phase>prepare-package</phase>
            <goals>
                <goal>exploded</goal>
            </goals>
        </execution>
    </executions>
</plugin>

<plugin>
    <groupId>com.google.code.maven-replacer-plugin</groupId>
    <artifactId>replacer</artifactId>
    <version>1.5.2</version>
    <executions>
        <execution>
            <phase>prepare-package</phase>
            <goals>
                <goal>replace</goal>
            </goals> 
        </execution>
    </executions>
    <configuration>
        <file>${project.build.directory}/${project.build.finalName}/WEB-INF/web.xml</file>
        <token>@@sec.level@@</token>
        <value>local</value>
    </configuration>
</plugin>

注意:replacer文档还建议使用official replacer plugin doc选项,该选项应阻止插件覆盖先前创建的exploded目标。但是,该选项并不适合此目的。

同样,以下方法将根据我的测试工作:

  • 使用exploded的{​​{1}}目标在maven-war-plugin下的<war_name>-tmp目录中创建未来战争文件的临时副本:那不是问题,target下的任何内容都应该通过target命令被丢弃
  • 配置clean插件以替换replacer文件
  • 的副本
  • 使用useCache选项配置默认web.xml目标,以指向war文件的最终web.xml文件

以下将适用上述方法:

war