我試圖寫一個Ant <scriptfilter...>
要改變字符串"__LINE__"
的出現在Java源文件的正確的行號。使用Ant scriptfilter計算行
沒有人有使用JavaScript(或其他一些嵌入的腳本語言)來做到這一點的例子嗎?特別是,如何創建一個「全局」變量,該變量在腳本啓動時初始化爲1
,並隨每個新行增加?
謝謝。
更新:剛剛嘗試過由Martin Clayton提供的解決方案(謝謝!),用Beanshell代替JavaScript,它的工作完美無缺。這裏是螞蟻的目標代碼:
<target name="preprocess" depends="ivy.resolve" description="Preprocess the source code">
<mkdir dir="${target.source.dir}"/>
<copy todir="${target.source.dir}" includeemptydirs="true" failonerror="true" verbose="true">
<fileset dir="${src.dir}"/>
<filterchain>
<tokenfilter>
<filetokenizer/>
<scriptfilter language="beanshell" byline="true" setbeans="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>
提問後,我開始看豆殼。我對JavaScript的瞭解也很薄弱。然而,Beanshell讓我用類似Java的語法來做同樣的事情。我要仔細看看第二種可能性('filetokenizer')。看起來它可能會**完全**我所需要的。謝謝。 – Ralph 2010-09-13 11:22:09