2010-12-07 2 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 클래스에서 수행되지만 원본 및 대상 파일의 이름은 필터 체인에서 액세스 할 수있는 방식으로 노출되지 않습니다. 유사하게, 파일 세트에 대한 반복은 '현재'파일 이름이 공용 변수에 보관되지 않은 복사 taskdef에서 발생합니다.

가장 나쁜 옵션은 ant-contrib 'for' task을 사용하여 파일 세트를 반복하고 각 파일을 하나씩 복사하는 것입니다. 반복 할 때 파일의 이름은 '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> 
관련 문제