将值从Ant属性文件中的属性复制到另一个属性

时间:2020-10-23 13:19:19

标签: replace ant matching

我需要将属性文件中一个属性的值复制到第二个属性中,并将其添加到属性文件中。

例如,如果我有一个包含以下内容的属性文件Test.properties

2018=jan;feb;mar    
2019=jan;feb;mar
2020=jan;feb;mar
********************************
name=john,math,sudha

运行Ant Test.properties后,我的输入属性为“ 2020”,输出为“ 2021”

2018=jan;feb;mar    
2019=jan;feb;mar
2020=jan;feb;mar
2021=jan;feb;mar
********************************
name=john,math,sudha

不更改顺序怎么办?

2 个答案:

答案 0 :(得分:0)

您可能可以根据以下条件使用某些东西:

想法是读取属性文件,然后将两个<propertyset>实例与<echoproperties> task一起使用来更新文件。

<property name="prop.file" value="Test.properties" />

<property name="input" value="2020" />
<property name="output" value="2021" />

<property name="pf" value="prefix" />
<property name="input.prop" value="${pf}.${input}" />

<loadproperties srcfile="${prop.file}" prefix="${pf}" />

<echoproperties destfile="${prop.file}">
  <propertyset>
    <propertyref prefix="${pf}" />
    <mapper type="glob" from="${pf}.*" to="*" />
  </propertyset>

  <propertyset>
    <propertyref name="${input.prop}" />
    <mapper type="glob" from="${input.prop}*" to="${output}*" />
  </propertyset>
</echoproperties>

那里的代码比您预期的要多:“前缀”用于确保从文件加载的属性不会与Ant构建文件中的任何属性发生冲突,因为属性是不可更改的。

propertysets任务中echoproperties的顺序很重要,特别是如果要更新的文件中已经有属性“ 2021”的值。在两个集合中都出现属性的地方,最后一个属性集中的值“获胜”并回显到输出文件。

答案 1 :(得分:0)

               <property name="prop.file" value="test.properties" />
               <property name="input" value="2020" />
               <property name="output" value="2021" />
                     <replaceregexp file="${prop.file}"
                           match="${input}(=)(.*)" 
                           replace="${input}=\2${line.separator}${output}=\2"
                           flags="gi"
                           byline="true" />