我已经使用eclipse在Windows 7中创build了一个jar文件。 当我试图打开jar文件它说无效或损坏的jar文件。 任何人都可以build议我为什么jar文件无效?
在Windows资源管理器中双击JAR文件时,会发生这种情况,但JAR实际上并不是可执行 JAR。 一个真正的可执行JAR应该至少有一个main()
方法的类,并在MANIFEST.MF
引用它。
在Eclispe中,您需要将项目导出为Runnable JAR文件而不是JAR文件以获取真正的可执行JAR文件。
或者,如果你的JAR只是一堆密切相关的类(一个库)的容器,那么你不应该双击它,而是使用一些ZIP工具打开它。 Windows资源管理器默认情况下会将JAR文件与java.exe
关联,这对于那些类型的库文件JAR是无效的。
这经常发生,当您更改JAR ZIP上的扩展名,提取zip内容并对文件进行一些修改,如更改MANIFEST.MF文件这是一个非常常见的情况,很多时候Eclipse不会生成MANIFEST文件我们想要的,或者我们想修改它的CLASS-PATH或者MAIN-CLASS值。
当您压缩文件夹时,会出现问题。
有效的Runnable / Executable 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
当你使用一个压缩工具解压时,再次更改文件和压缩文件,通常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)
🙂
问题可能是你的JAR中有超过65536个文件: 为什么java会抱怨有很多条目的jar文件? 这个问题的答案描述了这个问题。
可能是因为MANIFEST.MF
的问题。 如果您知道主类所在的包,请尝试使用以下命令启动主类。
java -cp launcher/target/usergrid-launcher-1.0-SNAPSHOT.jar co.pseudononymous.server
这是错误中“显示”的常见问题? 是的,它发生了很多,这里有一个链接: http : //dev-answers.blogspot.com/2006/07/invalid-or-corrupt-jarfile.html
解:
使用ant任务来即时创建清单文件,可以让您输入以下内容:
Manifest-Version: 1.0 Ant-Version: Apache Ant 1.6.2 Created-By: 1.4.2_07-b05 (Sun Microsystems Inc.) Main-Class: com.example.MyMainClass
自己创建清单文件,用最基本的东西来解决这个问题:
Manifest-Version: 1.0 Main-Class: com.example.MyMainClass
随着更多的调查,我敢肯定,我可以有动态的元文件创建工作与蚂蚁,因为我知道其他人一样 – 必须有一些特殊的组合我的ant版本(1.6.2),Java版本(1.4。 2_07),也许是当前的月相。
笔记:
解析Meta-inf文件已经成为一个问题,已经出现,被修复,然后再次出现太阳。 请参阅: 错误ID:4991229 。 如果你能确定这个错误是否存在于你的(或我的)Java SE版本中,那么你对我有更多的耐心。
另外,请确保在运行时使用的Java版本与编译期间使用的Java版本等效或更高版本
它也可能是MANIFEST.MF
的错字,p.ex. 与两个建造日期:
Build-Date:: 2017-03-13 16:07:12
尝试使用命令jar -xvf fileName.jar,然后将解压缩文件的内容导出到Eclipse中的新Java项目中。