从 jar 中删除文件的 ant 任务

2022-09-01 08:15:49

如何编写一个从以前编译的JAR中删除文件的ant任务?

假设我的JAR中的文件是:

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

...我想要一个没有包的这个JAR文件的版本,我需要使用ant将其剥离出来,这样我最终会得到一个包含以下内容的JAR:aaa.bbb.def

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

谢谢!


答案 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/*"
/>