2010-12-07 24 views
2

Antコピータスク内にコピーされている現在のファイル名を取得できますか?私はBeanShellのスクリプトを実行しようとしていますし、現在のファイル名へのアクセスを希望:Antコピータスクフィルタ内のファイル名を取得する

<target> 
    <mkdir dir="${project.build.directory}/generated-sources"/> 
    <copy todir="${project.build.directory}/generated-sources" 
      includeemptydirs="true" failonerror="true" verbose="true"> 
     <fileset dir="${project.build.sourceDirectory}"/> 
     <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> 

答えて

3

これは、しばらくの間、私を盗聴されています - 私はこれを行うには良い方法があることを望んだが、私はしましたまだ見つかりませんでした。

「コピー」タスクのAntソースコードを見てきました。実際のコピーはResourceUtilsクラスで行われますが、ソースファイルと宛先ファイルの名前はフィルタチェーンからアクセスできるように公開されていません。同様に、ファイルセットに対する反復は、現在のファイル名がパブリック変数に保持されていないcopy taskdefで行われます。

最低の悪いオプションは、ant-contrib 'for' taskを使用してファイルセットを反復し、各ファイルを1つずつコピーすることです。反復処理を行うと、ファイルの名前は 'param'属性で指定されたプロパティで利用できます。

<for param="file.name"> 
    <path> 
    <fileset dir="${project.build.sourceDirectory}"/> 
    </path> 
    <sequential> 
    <local name="file.name"/> 
    <property name="file.name" value="@{file.name}"/> 
    <copy file="${file.name}" ... > 
     ... 
     <filterchain> 
     <scriptfilter ...> 
      ... 
      current_file = project.getProperty("file.name"); 
      ... 
     </scriptfilter> 
     </filterchain> 
     ... 
    </copy> 
    </sequential> 
</for> 
関連する問題