2014-04-18 1 views
1

정의 파일을 기반으로 일부 Java 코드를 생성하는 스크립트를 실행합니다. 정의 파일이 변경되지 않은 경우이 작업을 실행하지 마십시오. 정의가 변경된 경우에만 소스 파일을 생성합니다.

<target name="generate" depends="init"> 
<exec executable="${codeGenTool-path}"> 
    <arg value="${definitionFolder}" /> 
    <arg value="${generatedFolder}" /> 
</exec> 
</target> 

나는 http://ant.apache.org/manual/Tasks/uptodate.html 보았다하지만 난에 비교하는 단일 대상 파일이 있어야합니다 것 같다. 코드 생성 도구는 많은 소스 파일을 포함하는 폴더를 만듭니다.

답변

1

outofdate taskant-contrib에서의 좋은 사용 사례입니다 : 이것은 generatedFolder에서 모든 파일에 대해 definitionFolder에서 모든 파일을 검사합니다

<outofdate> 
    <sourcefiles> 
    <fileset dir="${definitionFolder}" /> 
    </sourcefiles> 
    <targetfiles> 
    <fileset dir="${generatedFolder}" /> 
    </targetfiles> 
    <sequential> 
    <exec executable="${codeGenTool-path}"> 
     <arg value="${definitionFolder}" /> 
     <arg value="${generatedFolder}" /> 
    </exec> 
    </sequential> 
</outofdate> 

이 - 당신이보다 긴밀하게 예를 파일 세트를 제한 할 수 있습니다 includes="**/*.def" 또는 관련 파일 확장명을 사용하십시오.

"타사"작업을 피하려면 dependset 작업을 사용하여 원본 파일과 대상 파일을 비교할 수 있습니다.

<target name="generate" depends="check.generate, do.generate" /> 

<target name="check.generate"> 
    <dependset> 
    <srcfileset dir="${definitionFolder}" /> 
    <targetfileset dir="${generatedFolder}" /> 
    </dependset> 

    <condition property="gen.required"> 
    <resourcecount count="0" when="equal"> 
     <fileset dir="${generatedFolder}" /> 
    </resourcecount> 
    </condition> 
</target> 

<target name="do.generate" if="gen.required"> 
    <exec ....> 
</target> 

dependset 작업은 그들 중 소스 파일의보다 오래된 경우 모든 대상 파일을 삭제, 그래서 우리는 do.generate 조건부 할 수 있습니다 - generatedFolder에는 파일이없는 경우 실행됩니다 이전에 실행 된 적이 없거나 생성 된 파일의 유효 기간이 만료 된 경우에 해당됩니다.

관련 문제