损坏的 jar 文件

2022-09-01 01:19:12

我使用eclipse在Windows 7中创建了一个jar文件。当我尝试打开jar文件时,它说无效或损坏的jar文件。任何人都可以建议我为什么jar文件无效?


答案 1

当您在Windows资源管理器中双击JAR文件时,就会发生这种情况,但JAR本身实际上不是可执行JAR。一个真正的可执行JAR应该至少有一个带有方法的类,并在 中引用它。main()MANIFEST.MF

在Eclispe中,您需要将项目导出为可运行的JAR文件而不是JAR文件,以获得真正的可执行JAR。

或者,如果你的JAR只是一堆密切相关的类(库)的容器,那么你不应该双击它,而应该使用一些ZIP工具打开它。Windows资源管理器即默认情况下将JAR文件与相关联,这不适用于这些类型的库JAR。java.exe


答案 2

当您更改 JAR 上的 ZIP 扩展名、提取 zip 内容并对文件进行一些修改(如更改清单)时,通常会发生这种情况。MF文件是一个非常常见的情况,很多时候Eclipse没有像我们想要的那样生成MANIFEST文件,或者也许我们想修改它的CLASS-PATH或MAIN-CLASS值。

当您压缩回文件夹时,会出现此问题。

有效的可运行/可执行 JAR 具有下一个结构:

myJAR (Main-Directory)
    |-META-INF (Mandatory)
             |-MANIFEST.MF (Mandatory Main-class: com.MainClass)
    |-com 
         |-MainClass.class (must to implement the main method, mandatory)
    |-properties files (optional)
    |-etc (optional)

如果您的JAR符合这些规则,那么如果您使用ZIP工具手动构建它,然后将扩展名更改回.jar

完成后,请尝试使用以下命令在命令行上执行它:

java -jar myJAR.jar 

当您使用zip工具解压缩,更改文件并再次压缩时,通常JAR结构会更改为此结构,这是不正确的,因为在文件系统的顶部添加了另一个目录级别,使其成为损坏的文件,如下所示:

**myJAR (Main-Directory)
    |-myJAR (creates another directory making the file corrupted)**
          |-META-INF (Mandatory)
                   |-MANIFEST.MF (Mandatory Main-class: com.MainClass)
          |-com 
              |-MainClass.class (must to implement the main method, mandatory)
          |-properties files (optional)
          |-etc (optional)

:)


推荐