web-dev-qa-db-ja.com

jarファイルからファイルを削除するantタスク

以前にコンパイルされたJARからファイルを削除するAntタスクを作成する方法は?

私のJAR内のファイルが次のとおりだとします。

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

...そして、aaa.bbb.defパッケージなしのこのJARファイルのバージョンが必要であり、antを使用してそれを取り除く必要があるため、次の内容を含むJARになります。

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

ありがとう!

32
bguiz

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>
57
mipadi

Jarファイルを解除してrejarする必要があります。

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

私はここで、gradle unzipのいくつかの短所を回避するためにantを使用するためにここに来ました。

オフのチャンスでは、誰かが同じボートに乗っています。

次に例を示します。

    task antUnzip() << {

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

Jarファイル対応のアーカイバプログラムの場合、たとえばLinuxの「Zip」が利用可能で、タスクは次の方法で実行できます。

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

サブツリーの削除は、使用するアーカイバーの機能によって異なります。
Antの「exec」タスクの「os」属性を使用すると、異なるOSで異なるアーカイバーを使用できます。

1
Michael Besteck

答えは私にとってはまったく意味がありませんでした-

<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

0
Marc Magon

あなたの要件に対する直接的な解決策があるかどうかはわかりません。 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

0
navr