我在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包中的文件,同时保持源不变,以便后续构建?
答案 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