2010-02-03 10 views
7

Mam główny skrypt budowania, który wywołuje różne cele. Jeden z tych celów musi przechowywać wartość, a inny cel musi go wyświetlić. Oczywiście to nie działa, więc myślę, że może to być związane z zakresem. Próbowałem var, property i deklarowanie właściwości poza target1. Ponieważ zmienna wydaje się być zmienna, wygląda na to, że potrzebuję jej użyć, ale za każdym razem moje dane wyjściowe są puste.Ant var i zakres właściwości

Główny skrypt

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

W celu 1:

<var name="myVar" value="${anotherVar}"/> 

Na wyświetlaczu:

<echo>${myVar}</echo> 

Odpowiedz

4

antcall rozpocznie się ant cel w nowym projekcie i nie wpłynie na główny projekt w jakikolwiek sposób. Spróbuj runtarget z antcontrib, aby uruchomić cele w tym samym projekcie.

+0

+1: Dziękuję za tę wskazówkę. Dzięki 'runtarget' mogłem łatwo uprzątnąć pliki kompilacji. – tangens

2

Możesz wywołać wiele celów za pomocą jednego elementu antcall. Te cele będą następnie udostępniać pojedynczą instancję projektu, w tym zdefiniowane właściwości. W tym celu należy określić cele, jak zagnieżdżonych elementów, takich jak ten:

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

Interesujący pomysł. Mam inne połączenia docelowe pomiędzy tymi dwoma. Mogłabym dodać ich wszystkich, ale wtedy miałbym ten sam problem z zakresu/bezpieczeństwa, jeśli zmienię wszystkie na runtarget. Ale tak czy inaczej jest to kompromis. – bobtheowl2

+0

Jest to obsługiwane tylko od wersji 1.6.3, w przeciwnym razie zobaczysz: "Zadanie nie obsługuje zagnieżdżonego elementu" docelowego "." –

+0

to nie współdzieli właściwości między dwoma obiektami docelowymi. – pstanton

2

Inną opcją znalazłem był antcallback, i wydaje się działać. Ogranicza to to, co jest zwracane tylko do określonej listy wartości, co wydaje się z natury bezpieczniejsze niż otwarcie zakresu całego celu (ponieważ ustawia, tworzy, modyfikuje wiele zmiennych i właściwości).

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

Myślę, że wszystkie te rozwiązania są prawidłowe, zależy to tylko od poziomu, na którym chcesz zmienić zakres zmiennych.

4

Czy naprawdę potrzebujesz użyć <antcall>? Czy zamiast tego możesz używać zależności docelowych?

Jak podejrzewasz, użycie <antcall> zasadniczo tworzy nowy zakres.

+0

Mamy teraz bałagan zależności i próbowaliśmy zmobilizować nasze wspólne cele, aby usunąć wszelkie wewnętrzne zależności i wykonać pewne czyszczenie, gdy tam byliśmy. – bobtheowl2

+0

Często używany jest ze względu na zagnieżdżone znaczniki . –

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

wpisz powyższy kod do swojego miejsca docelowego1. Jestem pewien, że będziesz mieć teraz dostęp do swojego param1 na ekranie.

Powiązane problemy