ant任务从jar中删除文件

时间:2010-03-26 05:02:28

标签: ant java jar packages

如何编写一个从先前编译的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

谢谢!

6 个答案:

答案 0 :(得分:56)

您是否尝试过使用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>

答案 1 :(得分:5)

你必须解开并重新开始。

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

答案 2 :(得分:1)

如果是具有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”属性允许在不同的操作系统上使用不同的归档程序。

答案 3 :(得分:1)

我来到这里期待使用ant作为一种解决方法,在gradle解压缩中进行一些简短的操作。

关于其他人在同一条船上的机会。

以下是一个例子:

    task antUnzip() << {

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

答案 4 :(得分:0)

我不确定是否有针对您要求的直接解决方案。我建议将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

答案 5 :(得分:0)

答案对我来说并不太好-

<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