Муравьиная задача удалить файлы из банки - PullRequest
30 голосов
/ 26 марта 2010

Как написать задачу ant, которая удаляет файлы из ранее скомпилированного JAR?

Допустим, файлы в моем JAR-файле:

aaa/bbb/ccc/Class1
aaa/bbb/ccc/Class2
aaa/bbb/def/Class3
aaa/bbb/def/Class4

... и мне нужна версия этого JAR-файла без пакета aaa.bbb.def, и мне нужно удалить его с помощью ant, чтобы я получил JAR, содержащий:

aaa/bbb/ccc/Class1
aaa/bbb/ccc/Class2

Спасибо!

Ответы [ 5 ]

56 голосов
/ 26 марта 2010

Вы пробовали использовать задачу zipfileset?

<jar destfile="stripped.jar">
    <zipfileset src="full.jar" excludes="files/to/exclude/**/*.file"/>
</jar>

Например:

<property name="library.dir" value="dist"/>
<property name="library.file" value="YourJavaArchive.jar"/>
<property name="library.path" value="${library.dir}/${library.file}" />
<property name="library.path.new" value="${library.dir}/new-${library.file}"/>

<target name="purge-superfluous">
    <echo>Removing superfluous files from Java archive.</echo>

    <jar destfile="${library.path.new}">
        <zipfileset src="${library.path}" excludes="**/ComicSans.ttf"/>
    </jar>

    <delete file="${library.path}" />
    <move file="${library.path.new}" tofile="${library.path}" />
</target>
5 голосов
/ 26 марта 2010

Вы должны разархивировать и заново.

<unzip src="myjar.jar" dest="/classes/">
<jar destfile="newjar.jar"
    basedir="/classes/"
    includes="**/*"
    excludes="**/def/*"
/>    
1 голос
/ 25 апреля 2016

Я пришел сюда, чтобы использовать муравья в качестве обходного пути, чтобы сделать некоторые короткие изменения в распаковке Gradle.

На случай, если кто-то еще окажется в той же лодке.

Вот пример:

    task antUnzip() << {

            ant.jar(destfile : "stripped.jar") {
                zipfileset (src : "full.jar", excludes : "files/to/exclude/**/*.file") {
                }
            }
}
1 голос
/ 12 марта 2011

Если программа-архиватор поддерживает jar-файл, например, "zip" в Linux доступен, задачу можно выполнить с помощью

<exec executable="zip">            
<arg value="-d"/>            
<arg value="myJarCopyToStrip.jar"/>            
<arg value="aaa/bbb/def/*>            
<arg value="aaa/bbb/def>
</exec>

Удаление поддерева зависит от возможностей используемого архиватора.
Атрибут «os» задачи Ant «exec» позволяет использовать разные архиваторы в разных ОС.

0 голосов
/ 26 марта 2010

Я не уверен, есть ли прямое решение для вашего требования. Я бы порекомендовал взорвать jar в какой-нибудь временный каталог и затем удалить ненужные файлы классов. Наконец, создайте новый jar с необходимыми файлами классов.

Ссылочные ссылки:

http://ant.apache.org/manual/Tasks/unzip.html

http://ant.apache.org/manual/Tasks/delete.html

http://ant.apache.org/manual/Tasks/jar.html

...