Ant replaceTokens包含行号和文件名

时间:2010-08-12 20:11:07

标签: ant preprocessor

Ant脚本中是否有任何方法可以使用<copy>任务(replaceTokens)预处理Java文件并将"__FILE__"字符串替换为复制文件的文件名{ {1}}该文件中的行号?这将大大有助于解决Java缺乏预处理器的问题。

"__LINE__"上的文档显示了固定替换字符串的示例,但我找不到任何方法将Ant放入文件名和行号中。

我是否需要编写自己的任务处理程序?

1 个答案:

答案 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>