2009-04-14 6 views
2

우리는 각각의 하위 프로젝트에 하나씩 많은 Ant 스크립트를 가지고 있습니다. 결국 우리는 마스터 빌드 스크립트에서이 모든 것을 실행하고 전체 프로젝트를 패키징하기 위해 다른 하우스 클리닝을 수행하기를 원합니다. 개별 개미 스크립트의 이름은 ant.xml이며 프로젝트의 하위 디렉토리에 있습니다. 각각은 Ant import을 사용하여 ant-commons.xml을 가져온 다음 특정 대상을 무시합니다. 예를 들어Ant 마스터 빌드 파일이 제대로 작동하지 않는 이유는 무엇입니까?

는 프로젝트 중 하나는이 모두 적절하게 classpath을 설정하고, 이론적으로,

이제 1.5에 sourcetarget을 (개미 - 공유지 1.4을 사용) 설정하려면 compile 대상을 재정의 쉬운 소리.

처음 몇 하위 프로젝트가 잘 실행 : 실제로 어떻게됩니까

<project name="Retain" basedir="." default="main"> 
    <target name="main"> 
    <ant dir="SharedJava" antfile="ant.xml" target="clean"/> 
    <ant dir="SharedJava" antfile="ant.xml" target="copy_current"/> 
    <ant dir="GWEasySoap" antfile="ant.xml" target="clean"/> 
    <ant dir="GWEasySoap" antfile="ant.xml" target="copy_current"/> 
    <ant dir="RetainLib" antfile="ant.xml" target="clean"/> 
    <ant dir="RetainLib" antfile="ant.xml" inheritAll="false" target="copy_current"/> 
    <ant dir="RetainIndex" antfile="ant.xml" target="clean"/> 
    <ant dir="RetainIndex" antfile="ant.xml" target="copy_current"/> 
    <ant dir="RetainPersist" antfile="ant.xml" target="clean"/> 
    <ant dir="RetainPersist" antfile="ant.xml" target="copy_current"/> 
    </target> 
</project> 

다음은 마스터 빌드 스크립트입니다. 사실, SharedJava의 항아리에 대한 참조가 필요한 RetainLib은 실패하고, 실패하면 어떻게 찾을 수없는 지에 대해 징벌을합니다. RetainLib을 제거했을 때 RetainIndex에 실패했습니다. 1.4 타겟 파일에서 제네릭을 사용하지 말아야 할 방법에 대해 징징 대는 것입니다.

주위를 연주 한 후, 나는 오버라이드 된 것 대신 ant-commons 안에 컴파일 타겟을 실행하는 것을 고집했다.

왜? 이 문제를 어떻게 해결할 수 있습니까? (우아하게 말하자면 분명히 ant-commons의 사용을 완전히 제거 할 수 있었고 일이 가능할 것이라고 확신했습니다.)

답변

1

inheritAll = "false" 속성을 작업에 사용하는 것이 좋습니다. 표시되는 문제는 기반 파일 및 마스터 파일의 다른 속성으로 인해 하위 프로젝트의 상대 경로에 문제가 발생한다는 것과 관련됩니다.

또한 서브 프로젝트 기반의 승리를 보장하기 위해 dir = ".." 속성을 잃어 버릴 것입니다.

그래서 이것이 내가 무엇을 할 것이라고는 ...

<project name="Retain" basedir="." default="main"> 
    <target name="main"> 
    <ant antfile="SharedJava/ant.xml" target="clean" inheritAll="false"/> 
    <ant antfile="SharedJava/ant.xml" target="copy_current" inheritAll="false"/> 
    <ant antfile="GWEasySoap/ant.xml" target="clean" inheritAll="false"/> 
    <ant antfile="GWEasySoap/ant.xml" target="copy_current" inheritAll="false"/> 
    ... 
    </target> 
</project> 
+0

아니요. 죄송합니다. 귀하의 충고는 적어도 결과에 따라 정확히 틀립니다. 1. dir을 제거하고 inheritFalse를 사용하면 호출 된 ant.xml 스크립트가 현재 디렉토리와 혼동되기 때문에 빌드가 즉시 실패합니다. 2.그것으로 복원 된 dir은 영광스럽고 정당한 장소입니다. :) 그리고 inheritFalse는 정확하게 설명 된대로 빌드가 실패합니다. –

0

모든 호출은 새로운 개미 인스턴스를 엽니 다. "SharedJava"가 ant-commons.xml에서 일부 재정의를 수행하더라도 다른 스크립트에서는이를 볼 수 없습니다. 일부는 상속되기 때문에 기본 스크립트에 ant-commons.xml을 포함시키고 하위의 값을 사용하려고 할 수 있습니다. 비 상속 값의 경우, 경로처럼 당신이 명명 된 매개 변수 같은 것을 사용할 수 있습니다 : 나는 외부 스크립트의 작업에 종속성 그러나 그들의 호출에 매개 변수로 표현하는 사람이없는 것으로 선택

<ant antfile="${check.build.file}" target="validateXml"> 
    <property name="p.check_dir" location="${project.base.dir}" /> 
    <property name="p.dtd_dir" location="${build.data.dir}" /> 
</ant> 

.

1

나는 이와 비슷한 프로젝트에서 일했고, 모든 개미 작업의 출력이 배치 된 빌드 디렉토리를 만드는 것이었다. 제대로 작동했다. 빌드 파일 내부에서 수행되는 작업에 대한 추가 정보가 없으면 추가 통찰력을 제공하기가 어려울 수 있습니다.

관련 문제