Если вы не хотите (или не можете легко) перечислить каждый файл по отдельности, одним из решений является использование задачи Zip, которая допускает вложенный <mappedresources>
(Ant 1.8.0+). После завершения задачи Zip вы можете использовать задачу Jar для добавления / обновления манифеста и / или добавления индекса.
Предположим, например, что в дополнение к желанию
yay_my.jar
boo_my.jar
foo_my.jar
bar_my.jar
в выходном JAR, у вас также есть каталог stuff/
, содержащий некоторые файлы и подкаталоги. Если вы хотите, чтобы содержимое stuff/
было включено в JAR, но вы хотите, чтобы stuff/subdir/*
было добавлено как other_subdir/*
, рассмотрите следующее:
<zip destfile="newjar.jar">
<zipfileset dir="yay" includes="my.jar" fullpath="yay_my.jar"/>
<zipfileset dir="boo" includes="my.jar" fullpath="boo_my.jar"/>
<!-- etc. -->
<mappedresources>
<fileset dir="stuff"/>
<compositemapper>
<globmapper from="subdir/*" to="other_subdir/*"/>
<identitymapper/>
</compositemapper>
</mappedresources>
</zip>
<!-- Update the newly-created ZIP in-place to add a basic manifest -->
<jar destfile="newjar.jar" update="true"/>
Я протестировал этот файл сборки, и он работает с Ant 1.8.2. Однако, если после его изменения Муравей начинает бросать NullPointerException
, см. Ошибка 54026 .