2011-08-08 4 views
14

말 그대로 대상을 무시하거나 어떻게 든이를 에뮬레이트 할 수 있습니까?Ant에서 타겟 재정의

<target name="release"> 
    <antcall target="release" /> <!-- call previous version, not recursion --> 
    <do-something /> 
</target> 

을 나는 안드로이드 예제를 설명 할 것이다, 그것은 의미를 가지고 있다고 생각 :

우리는이 내가 뭔가를 같은 역할을합니다

<target perform-after="release"> 
    <do-something /> 
</target> 

를 호출 그래서

, .xmlbuild.xml (SDK 폴더 ({$SDK}/tools/ant/*.xml))의 모든 템플릿을 포함하며,이 파일은 모두 생성 된 build.xml for eac h 프로젝트. 비어 있고 쉽게 재정의 할 수있는 -pre-compile, -pre-build-post-compile 대상 만 있습니다. 그러나 예를 들어 빈 -post-release 대상이 없습니다. Google은 생성 된 build.xml 개의 의견을 타겟을 직접 복사하여 내 build.xml에 붙여 넣은 다음 튜닝하는 것을 권장합니다. 그러나 나는 그것이 OK가 아니라고 생각한다. 왜냐하면 구글이 템플릿 내에서이 타겟의 어떤 것을 바꿀 것이기 때문에 내가 구식 버전을 사용하고 있다는 것을 결코 알지 못할 것이기 때문이다.

답변

24

import 작업의 "대상 재정의"섹션이나 include 작업의 "대상 다시 쓰기"섹션을 참조하십시오. 간단히 말해 공통 build.xml에 "common"과 같은 프로젝트 이름을 지정하고 antcall에 "common.release"를 사용하십시오.

antcall은 런타임에 새 프로젝트를 시작하므로 대상이 설정 한 변수가 나중에 표시되지 않으므로 완전히 동일하지 않습니다. 테스트를 위해이 컴퓨터에서 사용할 수있는 앤트가 없지만 앤콜을 피하기 위해 다음과 같이 시도해 볼 수 있습니다.

<target name="release" depends="common.release, -post-release"/> 
+1

쿨한 그게 원했고 아무도 나에게 대답하지 않았습니다. 감사합니다. ! –

+1

그리고 효과가있었습니다. –