在 Maven 构建期间替换 xml 中的多行的问题
Issue with replacing multiple lines in xml during maven build
我需要替换 maven
构建后生成的 war
文件中的多行 .wsdd
文件。
为此,我正在使用 antrun-maven-plugin
和 ant's replace task
。
下面是来自 pom.xml
的片段:
<plugin>
<groupId>com.github.odavid.maven.plugins</groupId>
<artifactId>antrun-maven-plugin</artifactId>
<executions>
<execution>
<phase>package</phase>
<configuration>
<target>
<ant antfile="replace.xml">
<target name="replace-config"/>
</ant>
</target>
</configuration>
<goals>
<goal>run</goal>
</goals>
</execution>
</executions></plugin>
此处 replace.xml
包含 ant
实际替换多行标记的目标,并用替换的 .wsdd
文件更新最终 war
,下面是我们替换多行的部分.wsdd
文件中的令牌。
<target name ="replace-config">
<echo>********** Replacing tokens in server-config.wsdd file *************</echo>
<replace dir="${basedir}/target/as_gen/WEB-INF/" >
<include name="server-config.wsdd"/>
<replacetoken><![CDATA[<requestFlow>
<handler type="java:org.apache.axis.handlers.JWSHandler">
<parameter name="scope" value="session"/>
</handler>
<handler type="java:org.apache.axis.handlers.JWSHandler">
<parameter name="scope" value="request"/>
<parameter name="extension" value=".jwr"/>
</handler>
</requestFlow>]]></replacetoken>
<replacevalue><![CDATA[<requestFlow>
<handler type="java:com.as.webservices.TS9TicketTokenSender">
<parameter name="scope" value="session"/>
</handler>
<handler name="_wss4j_as_receiver_handler" type="java:com.as.security.asWSSReceiverHandler">
<parameter name="action" value="NoSecurity"/>
</handler>
<handler type="java:com.cm.ChangeHandler"/>
<handler type="java:com.cm.WSLoggingHandler"/>
</requestFlow>
<responseFlow>
<handler type="java:com.as.webservices.TS9TicketTokenSender"/>
<handler name="_wss4j_as_sender_handler" type="java:com.as.security.asWSSSenderHandler">
<parameter name="signatureKeyIdentifier" value="IssuerSerial"/>
<parameter name="encryptionKeyIdentifier" value="IssuerSerial"/>
<parameter name="action" value="NoSecurity"/>
</handler>
<handler type="java:com.cm.WSLoggingHandler"/>
</responseFlow>
]]></replacevalue>
</replace>
现在,当 运行 在 unix 机器上时,这会给出正确的结果,并且标记已成功替换为替换值,但不知何故,替换不会在我的 windows 机器上发生。
请帮助识别问题和替代方法。谢谢。
我能够使用 ant 的 replaceregexp
任务来做到这一点。
识别 match
属性中 <requestFlow>....</requestFlow>
之间的第一个内容,并在 replaceregexp
任务
的 replace
属性中添加替换值
我需要替换 maven
构建后生成的 war
文件中的多行 .wsdd
文件。
为此,我正在使用 antrun-maven-plugin
和 ant's replace task
。
下面是来自 pom.xml
的片段:
<plugin>
<groupId>com.github.odavid.maven.plugins</groupId>
<artifactId>antrun-maven-plugin</artifactId>
<executions>
<execution>
<phase>package</phase>
<configuration>
<target>
<ant antfile="replace.xml">
<target name="replace-config"/>
</ant>
</target>
</configuration>
<goals>
<goal>run</goal>
</goals>
</execution>
</executions></plugin>
此处 replace.xml
包含 ant
实际替换多行标记的目标,并用替换的 .wsdd
文件更新最终 war
,下面是我们替换多行的部分.wsdd
文件中的令牌。
<target name ="replace-config">
<echo>********** Replacing tokens in server-config.wsdd file *************</echo>
<replace dir="${basedir}/target/as_gen/WEB-INF/" >
<include name="server-config.wsdd"/>
<replacetoken><![CDATA[<requestFlow>
<handler type="java:org.apache.axis.handlers.JWSHandler">
<parameter name="scope" value="session"/>
</handler>
<handler type="java:org.apache.axis.handlers.JWSHandler">
<parameter name="scope" value="request"/>
<parameter name="extension" value=".jwr"/>
</handler>
</requestFlow>]]></replacetoken>
<replacevalue><![CDATA[<requestFlow>
<handler type="java:com.as.webservices.TS9TicketTokenSender">
<parameter name="scope" value="session"/>
</handler>
<handler name="_wss4j_as_receiver_handler" type="java:com.as.security.asWSSReceiverHandler">
<parameter name="action" value="NoSecurity"/>
</handler>
<handler type="java:com.cm.ChangeHandler"/>
<handler type="java:com.cm.WSLoggingHandler"/>
</requestFlow>
<responseFlow>
<handler type="java:com.as.webservices.TS9TicketTokenSender"/>
<handler name="_wss4j_as_sender_handler" type="java:com.as.security.asWSSSenderHandler">
<parameter name="signatureKeyIdentifier" value="IssuerSerial"/>
<parameter name="encryptionKeyIdentifier" value="IssuerSerial"/>
<parameter name="action" value="NoSecurity"/>
</handler>
<handler type="java:com.cm.WSLoggingHandler"/>
</responseFlow>
]]></replacevalue>
</replace>
现在,当 运行 在 unix 机器上时,这会给出正确的结果,并且标记已成功替换为替换值,但不知何故,替换不会在我的 windows 机器上发生。
请帮助识别问题和替代方法。谢谢。
我能够使用 ant 的 replaceregexp
任务来做到这一点。
识别 match
属性中 <requestFlow>....</requestFlow>
之间的第一个内容,并在 replaceregexp
任务
replace
属性中添加替换值