2017-12-22 4 views
1

배포 프로세스에 ANT 빌드를 사용하고 있습니다. 이를 위해, 나는 아래의 점, 만든ANT 빌드에서 여러 대상의 'depends'속성에서 한 대상을 사용하는 방법은 무엇입니까?

  1. 을 따라 'svn.checkout'( 작업 공간에 SVN에서 체크 아웃 소스) 'initiate.deploy'( 배포를 시작하기)라는 이름의 ANT 다섯 개 목표, 'generate.ear'(EAR 생성) 및 'deploy.ear' (서버에 EAR 배포), 'clean.workspace'(청소 작업 영역 dirtory).
  2. 'initiate.deploy'대상이 기본 대상입니다.
  3. 'svn.checkout'대상 및 'deploy.ear'대상 다음에 작업 공간 디렉토리를 정리해야합니다.
  4. 'svn.checkout'대상의 'depends'속성에 'clean.workspace'대상을 넣고 'initiate.deploy'대상에 넣습니다.

내 코드 :

<target name="initiate.deploy" description="Initiate deployment" depends="svn.checkout, generate.ear, deploy.ear, clean.workspace"> 
     .......................... 
    </target> 

    <target name="svn.checkout" description="SVN checkout" depends ="clean.workspace"> 
     .......................... 
    </target> 

그러나 대상 'clean.workspace'가 'svn.checkout'하지만 이후 'deploy.ear'대상 전에 한 번만 실행됩니다.

다음과 같이 빌드 시퀀스가 ​​생성됩니다. 타겟 (들) 'initiate.deploy'용

빌드 시퀀스 [update.property.file clean.workspace, svn.checkout, check.workSpace, generate.ear, deploy.ear이다 시작. deploy]

ANT 빌드의 여러 대상에서 'depends'속성을 사용하는 방법은 무엇입니까?

답변

0

로는 Ant documentation 설명 : 주어진 타겟 상기와 같은 D로부터 위로 연신 의존성 체인

각 타겟은 한번만 실행 이상의 대상에 종속 되더라도 도착 .

제 생각에 이것은 의존성 그래프의 순환을 피하기위한 것입니다.

<target name="initiate.deploy" description="Initiate deployment" depends="svn.checkout, generate.ear, deploy.ear"> 
    .......................... 
    <antcall target="clean.workspace" /> 
</target> 

<target name="svn.checkout" description="SVN checkout" depends ="clean.workspace"> 
    .......................... 
</target> 

업데이트 :

으로 여기에, 당신은 antcall 작업을 통해 명시 적으로 initiate.deploy의 종속성에서 clean.workspace을 제거하고 호출하여 예를 들어, 목표를 수정해야 인해

주석에 언급 된대로 antcall 작업은 새 Ant 프로젝트에서 호출 된 대상을 시작하므로 바람직하지 않은 오버 헤드가 발생할 수 있습니다. 이 문제를 피하기 위해 대상을 macrodef으로 감싸고 다른 대상의 작업으로 호출 할 수 있습니다.그런 다음 다른 작업의 종속성으로 사용할 유지하기 위해, 새로운 macrodef를 호출하도록 호출 대상을 변경할 수 있습니다 : 설명에 대한

<target name="initiate.deploy" description="Initiate deployment" depends="svn.checkout, generate.ear, deploy.ear"> 
    .......................... 
    <clean.workspace.macro /> 
</target> 

<target name="svn.checkout" description="SVN checkout" depends ="clean.workspace"> 
    .......................... 
</target> 

<target name="clean.workspace"> 
    <clean.workspace.macro /> 
</target> 

<macrodef name="clean.workspace.macro"> 
    <sequential> 
     <!-- do the workspace cleanup --> 
     .......................... 
    </sequential> 
</macrodef> 
+0

감사합니다. 매우 분명하다. 그러나 antcall을 사용하면 Ant 빌드의 새 인스턴스가 시작됩니다. 맞아? – AJK

+0

@AJK 네, 맞습니다. 호출 된 타겟은 새로운 Ant 프로젝트에서 시작될 것입니다. 이것을 반영하고 대안을 제안하는 답변을 업데이트했습니다. – Lolo

+0

감사합니다. 내가 개미를 처음 접했을 때 나는 이걸로 새롭고 중요한 것을 배웠다. – AJK

관련 문제