yılında zamanında dinamik içeriğe sahip bir Birlik ve Macrodef tarzı elemanı oluşturma , extrasrc-f ve extrasrc-c. Geldikten sonra, ilgili tüm kaynaklar için güncel bir kontrol yapmak istiyorum, o zaman sadece hedef güncel değilse bir inşa yapın. Şu anda ne varSonra isteğe bağlı iki birkaç varsayılan parametreleri, hedef, kök ve benzeri ve götüren bir macrodef sahiptir Ant inşa edilmiş bir yapı komut dosyası ettik
,
<?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>
Ama bu verimsiz benim için zaman içinde bu noktada görebilirsiniz İstediğimi yapmak, ben oluşturmak ve en geçmek ettik En az bir dosya grubu ve birden çok sınıf yolu. Yapmak istediğim şey sadece bir dizin listesine girmektir, sonra extrasrc-f ve extrasrc-c elemanlarını bu bilgiden anında yaratabilirsiniz, ama benim için, nasıl olduğumu hiç bilmiyorum. Bunu yapabilirim.
Birçok Ant ve Ant-Contrib korkulu dersi okudum, ama böyle bir şey yapmama izin verecek bir şey okumamıştım, tuhaf buluyorum, çünkü bana göre bariz durum.
Ben çok yanlış bir şekilde bu yaklaşan muyum, yoksa ben eksik bir şey mi? Eğer Ant'i gerçekten yanlış kullanırsam, işaretçiyi doğru şekilde bu şekilde nasıl yaparım, bir catchall, bir makrodefde şablon oluşturmak (veya bunu yapmak için tek yol buysa), birden fazla kaynak test eden Ekstra sınıf veya kütüphane yollarından da geçerken, tercihen tek bir listede bulunan bir dosyaya karşı dosyalar oluşturulur.
Özür. –
Haha, endişelenmenize gerek yok Martin, geç cevap verse bile bir cevap her zaman takdir edilir. Bu soruyu sorduğumdan beri, artık aynı şirkette değilim, ama ben hala düzenli olarak Sc betikleriyle oynuyorum ve scriptdef hakkında hiçbir fikrim yoktu, bunun için çok teşekkürler! – seaders