3

我有财产

基数=100

在属性文件中。

我想根据要添加的值创建值 102、103、105 等。

如何将数字添加到属性并获得附加值?

4

4 回答 4

7

您不需要额外的 ant 任务或额外的脚本语言来进行数学运算,只需使用 java 附带的内置 javascript 脚本引擎(自 jdk 1.6,Sun 自己基于 rhino 1.6R2 的实现)结合 ant api 并放入一个 macrodef 以供重用, IE :

<project>
  <property name="foo" value="22"/>
  <echo>$${foo} => ${foo}</echo>

  <!-- create macrodef -->
  <macrodef name="math">
   <attribute name="operation"/>
   <attribute name="operator1"/>
   <attribute name="operator2"/>
   <attribute name="result"/>
   <sequential>
    <script language="javascript">
     tmp = 0;
     switch ("@{operation}")
     {
      case "+" :
       tmp = parseInt("@{operator1}") + parseInt("@{operator2}");
       break;
      case "-" :
       tmp = parseInt("@{operator1}") - parseInt("@{operator2}");
       break;
      case "*" :
       tmp = parseInt("@{operator1}") * parseInt("@{operator2}");
       break;
      case "/" :
       tmp = parseInt("@{operator1}") / parseInt("@{operator2}");
       break;
     }
     project.setProperty("@{result}", tmp);
    </script>
   </sequential>
 </macrodef>

  <!-- create new properties -->
  <math operation="/" operator1="${foo}" operator2="11" result="foooo"/>
  <math operation="+" operator1="${foo}" operator2="21" result="fooo"/>
  <!-- overwrite existing property foo -->
  <math operation="+" operator1="${foo}" operator2="1" result="foo"/>
  <echo>
  create    => $${fooo} => ${fooo}
  create    => $${foooo} => ${foooo}
  overwrite => $${foo}  => ${foo}
  </echo> 
</project>

如果您需要覆盖现有的用户属性(= 通过 ant -f foobar.xml -Dmyuserproperty=foo ... 在命令行上定义的那些属性),您必须使用以下方法:

project.setUserProperty()
于 2013-05-04T19:25:00.467 回答
4

您可以使用默认情况下<buildnumber>使用文件名的任务。build.numberamine 的评论链接中的建议更笼统:<propertyfile>任务可以设置、增加、减少或删除属性。

<propertyfile file="number.properties">
    <entry key="base.number" type="int" operation="+" value="1"/>
</propertyfile>
于 2013-05-03T19:57:20.270 回答
2

Ant contrib 有一个数学任务。它可以添加数字等。这意味着你:

  1. 读取属性
  2. 使用数学任务来添加数字
于 2013-05-03T19:57:23.847 回答
2

这是一个使用 javascript 脚本引擎允许任意表达式的宏:

<macrodef name="property-exp">
    <attribute name="name" />
    <attribute name="value" />
    <sequential>
        <script language="javascript">
            project.setProperty("@{name}", eval(@{value}));
        </script>
    </sequential>
</macrodef>

<property name="old-version" value="new-version" />
<property-exp name="new-version" value="${old-version} + 1" />
<echo>old=${old-version}, new=${new-version}</echo>
于 2015-05-18T09:15:25.727 回答