2010-03-26 3 views
28

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

Скажем файлы в моем JAR являются:

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

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

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

Спасибо!

ответ

55

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

@mipadi Спасибо за ваш ответ! Я надеялся, что существует метод без промежуточной стадии - прямое удаление файлов/папок из Jar. В противном случае, я думаю, это самое близкое, что я доберусь до него! – bguiz

+0

Просто FYI, возможно, большинство это знает, но я не думал об этом :-). Задача «jar» изменит MANIFEST.MF JAR, что в моем случае вызвало проблемы. Я просто добавил атрибут «manifest» к задаче jar и указал его на манифест, который я хотел использовать. Большой ответ, хотя, определенно помог мне, спасибо! – Craig

+1

Также можно использовать 'zip' вместо' jar', чтобы избежать изменения MANIFEST.MF – npostavs

0

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

Справочные ссылки:

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

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

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

5

Вы должны unjar и rejar.

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

Если банку-файл, способный программа архиватор, как, например, «Молния» на Linux, доступна, задача может быть сделана

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

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

1

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

С другой стороны, кто-то еще находится в одной лодке.

Вот пример:

task antUnzip() << { 

      ant.jar(destfile : "stripped.jar") { 
       zipfileset (src : "full.jar", excludes : "files/to/exclude/**/*.file") { 
       } 
      } 
} 
Смежные вопросы