2010-08-12 31 views
1

有Ant腳本中的任何方式使用<copy>任務(replaceTokens)預處理的Java文件,並替換"__FILE__"字符串複製的文件的文件名和"__LINE__"與行號在那個文件中?這對於解決Java缺乏預處理器會有很長的路要走。螞蟻replaceTokens行號和文件名

replaceTokens上的文檔顯示了固定替換字符串的示例,但是我找不到任何讓Ant分別放入文件名和行號的方法。

我是否需要編寫自己的任務處理程序?

+0

我敢肯定,你必須編寫自己的任務來實現這一點。請參閱http://ant.apache.org/manual/develop.html#writingowntask也許你可以延長現有的任務嗎? – 2010-08-16 12:26:21

回答

0

這是我想出的。它確實__LINE__,但不是__FILE__。呵呵:-(。

<target name="preprocess" description="Preprocess the source code"> 
    <mkdir dir="${target.generated.dir}"/> 
    <copy todir="${target.generated.dir}" includeemptydirs="true" failonerror="true" verbose="true"> 
     <fileset dir="${source.dir}"> 
      <exclude name="${source.main.resources.dir}"/> 
     </fileset> 
     <filterchain> 
      <tokenfilter> 
       <filetokenizer/> 
       <scriptfilter language="beanshell" byline="true"><![CDATA[ 
        import java.io.BufferedReader; 
        import java.io.StringReader; 
        int count = 1; 
        BufferedReader br = new BufferedReader(new StringReader(self.getToken())); 
        StringBuilder builder = new StringBuilder(); 
        String line; 
        while ((line = br.readLine()) != null) { 
         builder.append(line.replace("\"__LINE__\"", Integer.toString(count))).append('\n'); 
         count++; 
        } 
        self.setToken(builder.toString()); 
       ]]></scriptfilter> 
      </tokenfilter> 
     </filterchain> 
    </copy> 
</target>