문제
나는 빌드 스크립트를 가지고 있으며 해당 스크립트의 일부로 jar 파일을 디렉토리에 복사합니다. 쉽게 utils jar라고 부를 수 있습니다.utils jar는 다른 디렉토리에 있는 다른 빌드 스크립트에 의해 빌드됩니다.내가 하려는 작업은 빌드 스크립트가 utils 빌드 스크립트를 실행하여 utils jar가 최신 상태인지 확인할 수 있도록 하는 것입니다.
그래서 utils 빌드 파일을 가져와야 한다는 것을 알고 있습니다.
<import file="../utils/build/build.xml" />
거의 모든 다른 개미 작업과 달리 가져오기 작업은 basedir에서 실행되지 않고 pwd에서 실행되기 때문에 작동하지 않습니다.그래서 이 문제를 해결하기 위해 빌드 파일을 성공적으로 가져오는 작은 작은 부분이 있습니다.
<property name="baseDirUpOne" location=".." />
<import file="${baseDirUpOne}/utils/build/build.xml" />
이제 가져오기 문제를 해결했으므로 작업을 호출해야 합니다. 그러면 쉽습니다.
<antcall target="utils.package" />
위에서 utils는 ../utils/build/build.xml의 프로젝트 이름입니다.
지금 겪고 있는 문제는 ant 호출이 ../utils/build에서 실행되지 않기 때문에 내가 필요로 하지만 찾을 수 없는 것은 runat 속성이나 이와 유사한 것입니다. 본질적으로 다음과 같습니다.
<antcall target="utils.package" runat="../utils/build" />
이것이 필요한 이유는 내 유틸리티 빌드 파일에서 jar에 복사할 코드를 선택하는 단계가 내 개미 파일의 하드코딩 경로를 피하기 위해 상대 경로를 기반으로 하기 때문입니다.어떤 아이디어가 있나요?
해결책
비슷한 설정이 있습니다.내 테스트 빌드를 관리하는 별도의 build.xml을 호출하는 기본 Ant build.xml이 있습니다.이것이 내가 하는 방법이다:
<target name="build-tests">
<subant target="build">
<fileset dir="${test.home}" includes="build.xml"/>
</subant>
</target>
비결은 다음과 같습니다. subant
대신에 antcall
.다른 빌드 파일을 가져올 필요는 없습니다.
다른 팁
사용해 보세요 "개미" 작업 가져온 빌드를 현재 빌드 파일로 가져오는 대신 직접 실행하는 "antcall" 작업 대신."dir" 매개변수가 있습니다:
새로운 개미 프로젝트를위한 기반으로 사용하는 디렉토리.inheritall이 False로 설정되지 않는 한 현재 프로젝트 기반의 기본값은 기본값이 없습니다.이것은 호출 된 프로젝트의 기반 설정을 무시합니다.
그래서 당신은 할 수 있습니다 :
<ant antfile="${baseDirUpOne}/utils/build/build.xml" dir="../utils/build" />
또는 그런 것.
antcall 블록에 중첩된 매개변수를 사용하여 antcall에 매개변수를 전달할 수 있습니다.따라서 그런 식으로 속성을 전달할 수 있습니다(속성은 변경할 수 없으므로 basedir도 가능함).