Подтвердить что ты не робот

Ant задача удалить файлы из банки

Как написать задачу 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

Спасибо!

4b9b3361

Ответ 1

Вы пытались использовать задачу 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>

Ответ 2

Вы должны развязать и поклониться.

<unzip src="myjar.jar" dest="/classes/">
<jar destfile="newjar.jar"
    basedir="/classes/"
    includes="**/*"
    excludes="**/def/*"
/>    

Ответ 3

Если программа архивирования, совместимая с 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" позволяет использовать разные архиваторы на разных ОС.

Ответ 4

Я пришел сюда, чтобы использовать ant в качестве обходного пути некоторых коротких сообщений в gradle unzip.

В случае случайности кто-то еще находится в одной лодке.

Вот пример:

    task antUnzip() << {

            ant.jar(destfile : "stripped.jar") {
                zipfileset (src : "full.jar", excludes : "files/to/exclude/**/*.file") {
                }
            }
}

Ответ 5

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

Ссылки ссылки:

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

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

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

Ответ 6

Ответы не совсем складываются для меня -

<zip destfile="tmp.jar">
        <zipfileset src="src.jar">
                <exclude name="**/*.class" />
        </zipfileset>
</zip>
<move file="tmp.jar" tofile="src.jar" /> 

Это использует один проход и не добавляет слишком много времени на сборку

источник: http://ant.1045680.n5.nabble.com/Remove-entru-from-ZIP-file-using-ANT-td1353728.html