创建 jar 存档时出错,包含超过 65535 个条目

Posted

技术标签:

【中文标题】创建 jar 存档时出错,包含超过 65535 个条目【英文标题】:Error creating jar archive contains more than 65535 entries 【发布时间】:2017-01-24 06:27:41 【问题描述】:

我正在尝试构建一个 jar 文件并收到错误 Build Failed。

创建 jar 时出现问题:存档包含超过 65535 个条目。 (并且存档可能已损坏,但我无法删除它)

我正在使用带有 JDK 1.8.0_101 的 Eclipse Neon Release 1,Eclipse 中的 Ant 版本是 1.9.6。

下面是我的 ant 构建文件:-

<property name="jar.name" value="ABC.jar" />
<property name="source.root" value="src" />
<property name="class.root" value="bin" />
<property name="lib.dir" value="lib" />
<property name="jar.dir" value="C:\D\ABC-Exe" />
<property name="Main-Class" value="com.abc.xxx.main.ABCEval" />
<property name="conf.pkj" value="com/abc/xxx/business/configurations" />
<property name="img.pkj" value="com/abc/xxx/business/images" />

<path id="project.class.path">
    <pathelement location="$class.root" />
    <fileset dir="$lib.dir">
        <include name="*.jar" />
    </fileset>
</path>

<target name="clean" description="cleans up build structures">
    <delete dir="$class.root" />
    <delete file="$jar.dir/$jar.name" />
</target>

<target name="prepare" description="sets up build structures">
    <mkdir dir="$class.root" />
</target>

<target name="compile" depends="prepare" description="Compiles all java classes">
    <javac srcdir="$source.root" destdir="$class.root" debug="on" optimize="off" deprecation="on" source="1.8" target="1.8" includeantruntime = "false">

        <classpath refid="project.class.path" />
    </javac>

    <mkdir dir="$class.root/$conf.pkj" />
    <mkdir dir="$class.root/$imwg.pkj" />

    <copy todir="$class.root/$conf.pkj">
        <fileset dir="$source.root/$conf.pkj" />
    </copy>

    <copy todir="$class.root/$img.pkj">
        <fileset dir="$source.root/$img.pkj" />
    </copy>

</target>

<target name="jar" depends="compile"> 

    <delete file="$jar.dir/$jar.name" quiet="true" failonerror="false" />

    <jar destfile="$jar.dir/$jar.name">

        <fileset dir="$class.root" includes="**/*.*" />
        <fileset dir="$source.root" includes="**/api/*.java,**/api/vo/*.java"/>

        <zipgroupfileset dir="$lib.dir" />


        <manifest>
            <attribute name="Main-Class" value="$Main-Class" />
            <attribute name="Class-Path" value="." />
        </manifest>

    </jar>


</target>


<target name="run">
    <java fork="true" classname="$Main-Class">
        <classpath>
            <path location="./$jar.name" />
        </classpath>
    </java>
</target>

【问题讨论】:

您没有加入问题。 What is the maximum number of files per jar?的可能重复 问题是无法使用 Java 1.8 和 ant 版本 1.9.6 创建 Jar。 【参考方案1】:

在您的 jar 任务中指定 zip64Mode 参数,说明您需要使用大的“zip64”格式:

<jar destfile="$jar.dir/$jar.name" zip64Mode="always">

【讨论】:

谢谢greg-449。现在通过添加 zip64Mode="always" 来构建 Jar。 嗨,格雷格,我正在使用已创建的 jar 中的 launch4j 3.9 制作 exe,方法是按照您的建议在 jar zip64Mode 中添加参数。但是现在该 exe 无法正常工作,因为它与之前的案例一起工作。 launch4j 3.9 是否需要任何配置才能从 jar 构建 exe。我已经在我的 launch4j 配置文件中提到了 1.8.0 我对launch4j一无所知 上述ant.xml配置文件中java 1.8是否需要其他配置,因为我的jar找不到.classfiles。

以上是关于创建 jar 存档时出错,包含超过 65535 个条目的主要内容,如果未能解决你的问题,请参考以下文章

Gradle + Spring Boot 无法处理超过 65535 个文件的 jar

framework.jar 听说只能有65535个接口,并且不能调用其他JAR 包的接口?

解决Android单个dex文件不能超过65535个方法问题

Django:在一个视图中有超过 3 个模型时出错

创建存档应用程序时出错 ios

使用包含 bean 的外部 JAR 启动 Spring Boot 应用程序时出错