Mam wbudowany skrypt budujący w Ant, który ma makrodefinię, która pobiera kilka domyślnych parametrów, cel, root i tym podobne, a następnie opcjonalne dwa , extrasrc-f i extrasrc-c. Po ich wejściu lubię sprawdzać wszystkie odpowiednie zasoby, a następnie wykonać kompilację, jeśli cel jest nieaktualny.Tworzenie elementu typu Union i Macrodef z dynamiczną zawartością w czasie wykonywania w Ant
Co mam w tej chwili,
<?xml version="1.0" encoding="UTF-8"?>
<project name="Custom build" default="default">
<taskdef resource="net/sf/antcontrib/antlib.xml"
classpath="C:/dev/ant/ant-contrib/ant-contrib-1.0b3.jar"/>
<macrodef name="checkuptodate">
<attribute name="target" />
<element name="resource" />
<sequential>
<condition property="needbuild">
<and>
<resourcecount when="greater" count="0"> <resource /> </resourcecount>
<not>
<uptodate targetfile="@{target}">
<srcresources> <resource /> </srcresources>
</uptodate>
</not>
</and>
</condition>
</sequential>
</macrodef>
<macrodef name="projbuild">
<attribute name="root" />
<attribute name="target" />
<element name="extrasrc-f" optional="true" />
<element name="extrasrc-c" optional="true" />
<sequential>
<local name="needbuild" />
<checkuptodate target="@{root}/bin/@{target}">
<resource>
<union>
<extrasrc-f />
<fileset dir="@{root}/src" includes="**/*.java" />
</union>
</resource>
</checkuptodate>
<if>
<istrue value="${needbuild}" />
<then>
<javac
srcdir="@{root}/src"
destdir="@{root}/bin"
includeantruntime="false"
>
<extrasrc-c />
</javac>
</then>
</if>
</sequential>
</macrodef>
<target name="default">
<projbuild root="." target="EntryPoint.class">
<extrasrc-f>
<fileset dir="Proj2/src" includes="**/*.java" />
<fileset dir="Proj3/src" includes="**/*.java" />
</extrasrc-f>
<extrasrc-c>
<classpath location="Proj2/src" />
<classpath location="Proj3/src" />
</extrasrc-c>
</projbuild>
</target>
</project>
Ale jak widać, w tym momencie, dla mnie jest to nieskuteczne, aby robić to, co chcę, mam do tworzenia i przejść w co przynajmniej jeden zestaw plików i wiele ścieżek klas. Naprawdę chciałbym tylko przekazać listę katalogów, a następnie utworzyć elementy extrasrc-f i extrasrc-c w locie z tych informacji, ale dla mojego życia nie mam pojęcia, jak to zrobić ". jestem w stanie to zrobić.
Przeczytałem dużo o wielu funky klas Ant i Contrib, ale nie czytałem niczego, co pozwoliłoby mi zrobić coś takiego, co dziwię się, bo dla mnie wygląda oczywistą sytuację.
Czy podchodzę do tego w bardzo zły sposób, czy jest coś, czego mi brakuje? Jeśli naprawdę źle wykorzystuję Anta, chciałbym, aby wskazówki we właściwym kierunku uczyły to poprawnie, stworzyć catchall, szablon zbudowany w makrodeficie (lub celu, jeśli to jedyny sposób, aby to zrobić), który testuje wiele źródeł pliki przeciwko jednemu plikowi, który zostanie skompilowany, a także przekazuje dodatkowe ścieżki klas lub bibliotek, najlepiej na jednej liście.
Przepraszam za powolną odpowiedź. –
Haha, nie martw się, Martin, odpowiedź jest zawsze ceniona, nawet jeśli jest spóźniona. Ponieważ zadałem to pytanie, nie jestem już z tą samą firmą, ale wciąż gram w mrówki i nie miałem pojęcia o scriptdef, bardzo dziękuję za to! – seaders