Ant属性文件条目未解析为其值

时间:2010-06-11 15:32:58

标签: ant

我在属性文件中有一个值,我想在构建运行时增加它。目标是复制一组文件并在每个文件的前面附加一个数字,以便维护它们被复制到目录中的顺序。我正在使用<propertyfile>任务,如下所示:

<propertyfile file="jsfiles.properties">
    <entry  key="file.number" type="int" operation="=" value="10" />
    <entry  key="file.number" type="int" default="010" operation="+" value="10" pattern="000" />
</propertyfile>

然后我做副本:

<copy todir="${js-in.dir}">
    <resources>
        ...
    </resources>
    <chainedmapper>
        <flattenmapper />
        <globmapper from="*.js" to="${file.number}-*.js"/>
    </chainedmapper>
</copy>

这正是我所需要的,除了以下输出之外:

  • 010-file1.js
  • 020-file2.js
  • 030-file3.js
  • ...

我明白了:

  • $ {file.number} -file1.js
  • $ {file.number} -file2.js
  • $ {file.number} -file3.js
  • ...

我做错了什么?

更新:根据以下其中一个答案,更简单的案例:

<propertyfile file="jsfiles.properties">
    <entry  key="file.number" type="int" operation="=" value="10" />
    <entry  key="file.number" type="int" default="0010" operation="+" value="10" pattern="0000" />

</propertyfile>

<target name="concat">
    <echo>${file.number}</echo>
</target>

打印[echo] ${file.number}

3 个答案:

答案 0 :(得分:4)

我发现<propertyfile>任务本身不加载属性值,只是编辑指定的属性文件。
要加载属性值,请使用<property>任务:
    <property file="jsfiles.properties" />
因此,在</propertyfile>之后添加此行以加载值

答案 1 :(得分:1)

<propertyfile file="jsfiles.properties">
  <entry  key="file.number" type="int" operation="=" value="10" />
  <entry  key="file.number" type="int" default="010" operation="+" value="10" pattern="000" />
</propertyfile>

用于递增属性文件中的值。我不知道这是否与你的问题有关。您应该能够在$ {basedir}

中的磁盘上找到jsfiles.properties

你得到$ {file.number} -file1.js的原因是因为在属性文件上下文之外有没有该名称的变量。

我试过了:

<target name="copy">
  <property name="indexStart" value="10"/>      
  <echo message="About to copy file from ${basedir}" /> 
  <copy todir="tmp" overwrite="true">
    <fileset dir="${basedir}" includes="*.js" />            
    <scriptmapper language="javascript">
      var i = parseInt(project.getProperty('indexStart'));          
      self.addMappedName(i+'_'+source);                 
      project.setProperty('indexStart', i+10);              
    </scriptmapper>         
  </copy>   
</target>

..它有点工作。由于某种原因,增量执行次数过多,但至少您应该能够按照复制的顺序对文件进行排序。

答案 2 :(得分:0)

您可以通过调用build.number

中的计数器propertyfile进行测试
<globmapper from="*.js" to="${build.number}-*.js"/> 

<强>更新

抓住上面的答案。 如果您在更新<echo>${file.number}</echo>后执行<propertyfile>,则会显示为$ {file.number},而不是值。这是需要解决的问题。

您的配置和我的差异是在第二个和</propertyfile>之后的换行符。我在<entry>之后添加了一个空白行,现在<echo>${file.number}</echo>正确显示。

<entry key="file.number" type="int" default="010" value="010" operation="+" pattern="000" /> 

</propertyfile>