ant任务从jar中删除文件

ant任务从jar中删除文件,ant,java,jar,packages,Ant,Java,Jar,Packages,如何编写一个ant任务,从以前编译的JAR中删除文件 假设我的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 谢谢 我不确定是否有直接的解决方案满足您的要求。我建议将

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

假设我的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

谢谢

我不确定是否有直接的解决方案满足您的要求。我建议将jar分解到某个临时目录,然后删除不需要的类文件。最后,使用所需的类文件创建一个新的jar

参考链接:


您必须取消帐户并重新启动

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

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

从Java存档中删除多余的文件。

如果有一个支持jar文件的archiver程序,例如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”属性允许在不同的操作系统上使用不同的归档程序。

我来这里是想用Ant解决gradle unzip中的一些缺点

很可能其他人也在同一条船上

以下是一个例子:

    task antUnzip() << {

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

task antUnzip()答案对我来说不太合适-

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

这只需要一个过程,不会给构建增加太多时间


来源:

@mipadi谢谢你的回答!我希望有一种没有中间阶段的方法——直接从Jar中删除文件/文件夹。如果失败了,我想这是最接近的了!仅供参考,可能大多数人都知道这一点,但我没有想到:-)。“jar”任务将修改jar的MANIFEST.MF,在我的例子中,这会导致问题。我只是将“manifest”属性添加到jar任务中,并将其指向我希望它使用的manifest。回答得很好,肯定帮了我的忙,谢谢!也可以使用
zip
而不是
jar
来避免更改MANIFEST.MF