执行Ant'replaceregexp'确定我的本地计算机,但不能在Microsoft VSTS上运行

时间:2017-10-12 12:53:20

标签: xml ant azure-devops azure-pipelines-build-task replaceregexp

寻找Ant的一些帮助,特别是'replaceregexp'方法。感谢任何和所有的建议。

问题

我们正在使用Ant来部署XML文件,并且需要在部署之前删除某些XML行。我们使用Microsoft VSTS作为部署工具。

我们需要Ant来扫描大量文件,并删除某些行。以下是我们需要分析和删除的一个小例子:

<classAccesses>
    <apexClass>CaseEntitlementMilestoneCalc</apexClass>
    <enabled>true</enabled>
</classAccesses>
<classAccesses>
    <apexClass>CaseEntitlementMilestoneCalc_Test</apexClass>
    <enabled>true</enabled>
</classAccesses>   
<classAccesses>
    <apexClass>CaseTriggerHandler</apexClass>
    <enabled>true</enabled>
</classAccesses>

在此示例中,我们要查找并删除XML的这一部分:

<classAccesses>
    <apexClass>CaseEntitlementMilestoneCalc_Test</apexClass>
    <enabled>true</enabled>
</classAccesses> 

我们在Ant中使用'replaceregexp'来执行此操作。这是我们为此编写的Ant代码:

<replaceregexp match="&lt;classAccesses&gt;\n(.*?)&lt;apexClass&gt;CaseEntitlementMilestoneCalc_Test&lt;\/apexClass&gt;\n(.*?)&lt;enabled&gt;(.*?)&lt;\/enabled&gt;\n(.*?)&lt;\/classAccesses&gt;" replace="" flags="gm" byline="false">    
                      <fileset dir="${src.dir}/profiles" includes="**/*.profile" />
                    </replaceregexp>

当我通过终端在我的Mac上运行它时工作正常,但是当我尝试在VSTS上运行它时,它不会执行查找/替换。以下是每个的调试日志:

我的Mac调试声明

[replaceregexp] Replacing pattern '<classAccesses>\n(.*?)<apexClass>CaseEntitlementMilestoneCalc_Test<\/apexClass>\n(.*?)<enabled>(.*?)<\/enabled>\n(.*?)<\/classAccesses>' with '' in '/Users/david.morris/DevWorkspace/R_Salesforce_Amey/src/profiles/FSL Mobile User.profile' with flags: 'gm'.
[replaceregexp] Found match; substituting
[replaceregexp] File has changed; saving the updated file

VSTS调试声明

fileset: Setup scanner in dir d:\a\1\s\src\profiles with patternSet{ includes: [**/*.profile] excludes: [] }
 Replacing pattern '<classAccesses>\n(.*?)<apexClass>CaseEntitlementMilestoneCalc_Test<\/apexClass>\n(.*?)<enabled>(.*?)<\/enabled>\n(.*?)<\/classAccesses>' with '' in 'd:\a\1\s\src\profiles\AAD JIT Provisioning.profile' with flags: 'gm'.
 No change made

问题

  1. 任何人都可以看到为什么我的Regex可以在我的本地机器上工作,而不是在VSTS上工作?
  2. 还有其他方法可以做到这一点更加万无一失吗?
  3. 谢谢!

1 个答案:

答案 0 :(得分:0)

尝试使用此代码:

&lt;classAccesses&gt;.*&#10;.*&lt;apexClass&gt;CaseEntitlementMilestoneCalc_Test&lt;\/apexClass&gt;.*&#10;.*&lt;enabled&gt;(.*?)&lt;\/enabled&gt;.*&#10;.*&lt;\/classAccesses&gt;