2010-01-26 32 views
4

我需要編寫一個Ant目標,將一個文件夾中的'.jar'文件名列表(逗號分隔)附加到一個變量中,該變量稍後將用作外部實用程序的輸入。 我遇到了範圍和不變性的障礙。我有權訪問ant-contrib,但不幸的是,我堅持使用的版本無法訪問'for'任務。這是我到目前爲止有:如何構建文件名列表?

<target name="getPrependJars"> 
    <var name="prependJars" value="" /> 
    <foreach param="file" target="appendJarPath"> 
     <path> 
      <fileset dir="${project.name}/hotfixes"> 
       <include name="*.jar"/> 
      </fileset> 
     </path>   
    </foreach> 

    <echo message="result ${prependJars}" /> 
</target> 


<target name="appendJarPath"> 
    <if> 
     <equals arg1="${prependJars}" arg2="" /> 
     <then> 
      <var name="prependJars" value="-prependJars ${file}" /> 
     </then> 
     <else> 
      <var name="prependJars" value="${prependJars},${file}" /> 
     </else> 
    </if>  
</target> 

似乎它自己的範圍內「appendJarPath」只修改「prependJars」。作爲一個測試,我嘗試使用「antcallback」,它可以用於單個目標調用,但對我的文件列表沒有多大幫助。

我意識到,我對糧食工作有點和詞法範圍是在絕大多數情況下可取的,但我真的希望得到這個工作,這樣或那樣的。有沒有人有任何創造性的想法來解決這個問題?

回答

9

您可能能夠使用pathconvert task,它允許你指定的分隔符爲逗號。

<target name="getPrependJars"> 
    <fileset id="appendJars" dir="${project.name}/hotfixes"> 
     <include name="*.jar" /> 
    </fileset> 
    <pathconvert property="prependJars" refid="appendJars" pathsep="," /> 

    <echo message="prependJars: ${prependJars}" /> 
</target> 
+0

這是完美的!謝謝! – AndreiM 2010-01-26 16:56:44

2

我會簡單地用Java編寫自定義任務:(1)採用文件夾名稱,(2)組裝結果字符串和(3)將其存儲到$ {} prependJars財產。

在螞蟻你剛纔定義的任務(taskdef),之後使用像所有其他任務。

我做到了一次,當我面臨着一個simliar問題,同時發現這是非常,非常容易。

這是tutorial

2

如果系統路徑格式是對你有用,你可以使用以下命令:

<target name="getPrependJars"> 
    <path id="prepend.jars.path"> 
     <fileset dir="${project.name}/hotfixes"> 
      <include name="*.jar"/> 
     </fileset> 
    </path>   
    <property name="prependJars" value="${toString:prepend.jars.path}" /> 

    <echo message="result ${prependJars}" /> 
</target> 
+0

是'$ {toString:jars.path}'一個錯字?應該是'$ {toString:prepend.jars.path}'而不是? – tresf 2017-01-30 16:57:34

+1

@QZSupport,看起來像是:)好趕上。 – rsp 2017-01-31 08:59:24