在 Maven 构建期间替换 xml 中的多行的问题

Issue with replacing multiple lines in xml during maven build

我需要替换 maven 构建后生成的 war 文件中的多行 .wsdd 文件。

为此,我正在使用 antrun-maven-pluginant'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 属性中添加替换值