【问题标题】:Invalid or corupt jarfile无效或损坏的 jarfile
【发布时间】:2011-01-22 02:38:44
【问题描述】:

我尝试从一个使用一些外部 jar 的 java 项目创建一个 jar 文件。我创建了一个 lib 文件夹并将我需要的所有 jar 放在那里。

我通过将 lib 文件夹中的所有 jars 添加到 Build Path 中来在 Eclipse 中运行该项目,它可以正常工作。

当我尝试使用 ant 从 build.xml 创建 jar 时,似乎没问题,没有显示错误。

当我尝试运行 jar 时,我收到消息“无效或损坏的 jarfile”。

在 build.xml 中: 我定义了用于编译的路径:

<path id="project.classpath">  
     <fileset dir="${lib}">
         <include name="**/*.jar"/>
     </fileset>
</path>

这是编译的目标:

<target name="compile" depends="init" description="compile the source " >
    <!-- Compile the java code from ${src} into ${build} -->
    <javac srcdir="${src}" destdir="${build}">  
          <classpath refid="project.classpath"/>  
    </javac>  
</target>

这是制作jar文件的目标:

<target name="dist" depends="compile" description="generate the distribution" >
      <mkdir dir="${dist}"/>
      <!-- Put everything in ${build} into the MyProject-${DSTAMP}.jar file -->
      <jar jarfile="${dist}/MyProject-${DSTAMP}.jar" basedir="${build}"> 
          <manifest>
            <attribute name="Main-Class" value="${main}" />
            <attribute name="Class-Path:" value="lib/**/*.*"/>
          </manifest>
          <fileset dir="${src}" includes="images/**/*.*" />
       </jar>
       <echo file="${dist}/start.bat" message="java -jar MyProject-${DSTAMP}.jar" />
  </target>

你能告诉我我做错了什么吗?

【问题讨论】:

    标签: java jar corrupt


    【解决方案1】:

    先把Class-Path:后面的冒号去掉才能匹配

    <attribute name="Class-Path" value="lib/**/*.*"/>
    

    那我建议阅读

    HOWTO Create MANIFEST.MF Classpath From Ant 或使用Manifestclasspath 更好

    【讨论】:

    • 它与 manifestclasspath 一起工作。问题确实是 jar 名称太长了,超出了允许的 72 个字符。
    • MANIFEST.MF 中的行是可换行的。我也认为罪魁祸首是多余的冒号。
    • +1 表示清单类路径。自 1.6.2 以来没有看过新的好东西,所以这是一个很好的补充。
    【解决方案2】:

    我认为您的 Class-Path 属性不应在 build.xml 中指定尾随冒号。

    尝试使用

    jar tvf {jarname} 
    

    从命令行,看看它是否可以扩展你的 jar 文件,以及它是否包含你所期望的(上面只是转储目录,但这是一个有用的检查)

    编辑:更改以反映以下反馈

    【讨论】:

    • 我也试过这个版本: 还是不行
    • 如果你查看你的清单文件,你会看到里面写着。但是这些类实际上是在你的 .jar 文件中吗?
    • 我打开罐子,它似乎包括所有东西。至少项目中的所有类和文件。 Manifest-Version: 1.0 Ant-Version: Apache Ant 1.7.0 Created-By: 11.0-b15 (Sun Microsystems Inc.) Main-Class: controller.Client Class-Path:: lib/**/*.jar
    • 是的,这些类都在包含的 jars 中。
    • 注意 Class-Path 中的双冒号
    猜你喜欢
    • 2016-07-29
    • 2017-05-03
    • 1970-01-01
    • 1970-01-01
    • 2021-11-23
    • 1970-01-01
    • 2019-01-12
    • 2019-12-04
    • 1970-01-01
    相关资源
    最近更新 更多