2010-08-12 9 views
1

Est-il possible dans un script Ant pour utiliser la tâche <copy> (replaceTokens) pour prétraiter les fichiers Java et remplacer une chaîne "__FILE__" avec le nom de fichier du fichier copié et "__LINE__" avec le numéro de ligne dans ce fichier? Cela irait un long chemin vers la résolution de l'absence de préprocesseur de Java.Ant replaceTokens avec les numéros de ligne et les noms de fichiers

Les documents sur replaceTokens montrent des exemples de chaînes de remplacement fixes, mais je ne trouve aucun moyen d'avoir Ant mis dans le nom de fichier et le numéro de ligne, respectivement. Dois-je écrire mon propre gestionnaire de tâches?

+0

Je suis sûr que vous devez écrire votre propre tâche pour y parvenir. Voir http://ant.apache.org/manual/develop.html#writingowntask Peut-être vous pourrait étendre la tâche existante? –

Répondre

0

Voici ce que j'ai trouvé. Il fait __LINE__, mais pas __FILE__. Eh bien :-(.

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