2010-02-03 2 views
7

다양한 대상을 호출하는 기본 빌드 스크립트가 있습니다. 이러한 대상 중 하나는 값을 저장해야하고 다른 대상은 표시해야합니다. 분명히 이것은 작동하지 않아 범위와 관련이 있다고 생각합니다. var, property를 시도하고 target1 외부에서 속성을 선언했습니다. var은 가변적 인 것 같아서 대신 사용할 필요가 있지만 출력이 없을 때마다 나타납니다.개미 var 및 속성 범위

홈페이지 스크립트이 target1에서

<antcall target="target1"/> 
<antcall target="display"/> 

:

디스플레이에서
<var name="myVar" value="${anotherVar}"/> 

:

<echo>${myVar}</echo> 

답변

4

antcall 새 프로젝트에 개미 대상을 시작하고 주요 프로젝트에 영향을 미치지 않습니다 어떠한 방식으로. 같은 프로젝트에서 대상을 실행하려면 antcontrib에서 runtarget을 시도하십시오.

+0

+1 :이 힌트를 가져 주셔서 감사합니다. 'runtarget'을 사용하면 빌드 파일을 쉽게 정리할 수있었습니다. – tangens

2

antcall 요소 하나를 사용하여 여러 대상을 호출 할 수 있습니다. 그런 다음이 대상은 정의 된 속성을 포함하여 단일 프로젝트 인스턴스를 공유합니다. 이렇게하려면 다음과 같이 중첩 된 요소로 대상을 지정하십시오.

<antcall> 
    <target name="target1"/> 
    <target name="display"/> 
</antcall> 
+0

흥미로운 아이디어. 이 둘 사이에는 다른 표적 호출이 있습니다. 거기에 모든 것을 추가 할 수는 있지만, 모두를 런타 목표로 변경하면 동일한 범위/보안 문제가 발생합니다. 그러나 어느 쪽이든 그 트레이드 오프. – bobtheowl2

+0

Ant 1.6.3 이후에만 지원됩니다. 그렇지 않으면 " 작업이 중첩 된"대상 "요소를 지원하지 않습니다." –

+0

두 대상 간의 속성을 공유하지 않습니다. – pstanton

2

다른 옵션은 antcallback이며 작동하는 것으로 보입니다. 이는 반환되는 값을 특정 값 목록으로 제한합니다.이 값은 전체 대상의 범위를 여는 것보다 안전합니다 (많은 var 및 속성을 설정, 생성, 수정 함).

<antcallback target="target1" return="myVar"/> 
<antcall target="display"/> 

이 모든 것이 유효한 해결책이라고 생각합니다. 변수 범위를 변경하려는 수준에 따라 달라집니다.

4

<antcall>을 정말로 사용해야합니까? 대신 타겟 종속성을 사용할 수 있습니까?

의심스러운 것으로, <antcall>을 사용하면 기본적으로 새 범위가 만들어집니다.

+0

우리는 지금 의존성 난장판을 가지고 있으며 내부 목표를 구성 요소 화하여 내부 종속성을 제거하고 거기에있을 때 정리 작업을 수행하려고했습니다. – bobtheowl2

+0

중첩 된 태그 때문에 종종 이 사용됩니다. –

0
<antcall target="display"> 
    <param name="param1" value="anything" /> 
</antcall> 

위의 코드를 target1에 넣으십시오 .1 지금 당장 param1에 액세스 할 수있을 것이라고 확신합니다.