2010-04-15 2 views
11

빌드 스크립트에 다음과 같은 정리 기능이있어서 어떻게 개선 할 수 있는지 알고 싶습니다. 특히 내 댓글에 대한디렉터리가 있고 삭제되지 않았을 때 Ant의 삭제 작업을 실패로 설정합니다.

<target name="clean" description="Clean output directories."> 
    <!-- Must not fail on error because it fails if directories don't exist. 
     Is there really no better way to do this? --> 
    <delete includeEmptyDirs="true" failonerror="false"> 
     <fileset dir="${main.build.directory}" /> 
     <fileset dir="dist" /> 
     <fileset dir="${documentation.build.directory}" /> 
     <fileset dir="/build-testing" /> 
    </delete> 
</target> 

, 나는 디렉토리 구조가 다른 목표에 의해 아직 설정되지 않았기 때문에 나는 신선한 상자에서이 작업을 실행할 수 없다는 사실에 만족 해요. 우리는 오래된 클래스 파일 등을 피할 때마다 매번 테스트 및 배포에 필요한 구조를 완전히 재현하는 방식으로 빌드를 실행합니다. 현재 delete가 설정되어있는 방식으로 파일을 삭제하지 않아도 빌드가 실패하지 않고 그대로 유지됩니다. I 파일이없는 경우에도 빌드가 실패하기를 원합니다. 그것이 존재하지 않는다면, 내가해야 할 일은 이미 일어났습니다.

생각하십니까?

+0

질문을 편집하는 대신 자기 대답 할 수 있습니까? 당신은 당신 자신의 대답을 받아 들일 수 있습니다. 그리고 나서 그것은 제 잘못을 끝내기 때문에 삭제할 수 있습니다. –

+1

자,가. :) –

답변

9

via Michael's answer 내가 필요로하는 것의 90 %이지만 그곳에는 전혀 미치지 못했습니다.

<target name="clean" description="Clean output directories."> 
    <!-- Must not fail on error because it fails if directories don't exist. 
     Is there really no better way to do this? --> 
    <delete includeEmptyDirs="true" failonerror="false"> 
     <fileset dir="${main.build.directory}" /> 
     ... 
    </delete> 

    <available 
      file="${main.build.directory}" 
      type="dir" 
      property="delete-main-failure" /> ... 

    <condition property="delete-failure"> 
     <and> 
      <isset property="delete-main-failure" /> ... 
     </and> 
    </condition> 
    <fail 
      if="delete-failure" 
      message="Unable to delete previous build's directories." /> 
</target> 

이 코드를 삭제하려고 시도하고 그것은 여전히 ​​존재하는 경우 실패 내 기준을 충족 :

내가 때문에 답변의로 결국 실제 솔루션은 다음과 같다. 그래도 추악한데. 삭제 작업의 기본 동작은 매우 이상하게 보입니다. 나는 그 근거가 당신이 무언가를 삭제하려고 시도하고 거기에 있지 않다면 틀린 것이 틀림 없다고 생각합니다. 정상적인 경우는 그것이 존재하지 않는다면 이미 존재하지 않기 때문에 당신이 상관하지 않는다는 것입니다. 이상한 경우는 당신이 거기에 있기 위해 필요했다는 것이지만 이제는이 특정한 단계에서 더 이상 존재하지 않아야합니다.

+0

"삭제 작업의 기본 동작이 나를 이상하게 보임" 그것은 나를 잘못 생각한 것입니다. – leonbloy

+0

여기서 조건 작업이 중복되는 것 같습니다. – mcsilvio

5

나는이 질문을하기 위해 여기에왔다. .. 이것을 해결하는 우아한 방법이있는 것처럼 보이지 않는다. 코드를 깨끗하게 유지하려면 다음과 같이하십시오.

<mkdir dir="${main.build.directory}" /> 
<delete dir="${main.build.directory}" failonerror="true" /> 

삭제 작업에 "if"속성이 있다고 생각하지 않았습니다. 체크 아웃해야합니다.

관련 문제