我使用eclipse在Windows 7中创建了一个jar文件。当我尝试打开jar文件时,它表示无效或损坏的jar文件。谁能告诉我为什么jar文件无效?
答案 0 :(得分:39)
当您在Windows资源管理器中双击JAR文件时会发生这种情况,但JAR本身实际上不是可执行文件 JAR。一个真正的可执行JAR应该至少有一个带有main()
方法的类,并在MANIFEST.MF
中引用它。
在Eclispe中,您需要将项目导出为 Runnable JAR文件而不是 JAR文件以获取真正的可执行JAR。
或者,如果你的JAR只是一堆密切相关的类(库)的容器,那么你不应该双击它,而是使用一些ZIP工具打开它。 Windows资源管理器默认情况下将JAR文件与java.exe
相关联,这对于那些类型的库JAR不起作用。
答案 1 :(得分:17)
当您更改JAR for 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
当您使用zip工具解压缩,再次更改文件和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)
:)
答案 2 :(得分:11)
问题可能是您的JAR中有超过65536个文件:Why java complains about jar files with lots of entries?此问题的answer中描述了此修复程序。
答案 3 :(得分:9)
可能是因为MANIFEST.MF
的问题。如果您知道主类所在的包,请尝试使用以下命令启动主类。
java -cp launcher/target/usergrid-launcher-1.0-SNAPSHOT.jar co.pseudononymous.Server
答案 4 :(得分:3)
这是错误中“清单”的常见问题?是的,它发生了很多,这是一个链接: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进行动态元文件创建,就像其他人所做的那样 - 在我的ant版本(1.6.2),java版本的组合中必须有一些特性(1.4.2_07)也许是目前的月相。
备注:强>
解析Meta-inf文件已成为一个问题,已经修复,然后再次出现在太阳上。见:Bug Id: 4991229。如果您可以解决如果您的(或我的)Java SE版本中存在此错误,那么您对我有更多的耐心。
答案 5 :(得分:1)
当我刚遇到这个主题时,我想分享我收到“无效或损坏的jarfile”消息的原因和解决方案:
我已经将pom.xml中的“ maven-jar-plugin”版本从2.1更新为3.1.2。 一切仍然正常,并建立了一个jar文件。但是以某种方式,它显然将不再运行。
当我再次将“ maven-jar-plugin”版本设置回2.1时,问题就消失了。
答案 6 :(得分:0)
另外,请确保在运行时使用的java版本与编译期间使用的java等效或更高版本
答案 7 :(得分:0)
它也可能是MANIFEST.MF
中的拼写错误,p.ex。包含两个:
Build-Date:: 2017-03-13 16:07:12
答案 8 :(得分:0)
尝试使用命令jar -xvf fileName.jar,然后将解压缩文件的内容导出到Eclipse中的新Java项目中。
答案 9 :(得分:0)
如果jar文件末尾有任何额外的字节,像7-Zip这样的资源管理器可以打开它,但它会被视为损坏。我使用在线上传系统,自动在每个jar文件的末尾添加一个额外的LF字符(&#39; \ n&#39; 0x0a)。使用此类文件,有多种解决方案可以运行该文件:
head -c -1 myjar.jar
的命令),然后双击或正常使用java -jar myfile.jar
执行jar。 所有这些解决方案都要求.zip和META-INF文件的结构基本上是正确的。它们只是在拉链结束时用一个额外的字节进行了测试。腐败&#34;它
通过两次应用head -c -1 *.jar > tmp.jar
,我陷入了困境。 head
在文件的开头插入了ASCII文本==> myjar.jar <==
,完全破坏了它。
答案 10 :(得分:0)
也许这只是a幸,但是有一次我遇到这个错误,我只需要杀死所有在后台运行的javaw.exe进程。之后,可执行JAR起作用了。
答案 11 :(得分:0)
当您通过FTP将文件传输到目标计算机时,这可能太愚蠢了,您可以运行.JAR文件,但是它太大了,以至于尚未完成传输:)是的,它发生在我身上..