Ant脚本中是否有任何方法可以使用<copy>
任务(replaceTokens
)预处理Java文件并将"__FILE__"
字符串替换为复制文件的文件名{ {1}}该文件中的行号?这将大大有助于解决Java缺乏预处理器的问题。
"__LINE__"
上的文档显示了固定替换字符串的示例,但我找不到任何方法将Ant放入文件名和行号中。
我是否需要编写自己的任务处理程序?
答案 0 :(得分: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>