没有主要的清单属性(但我在jar中有清单文件)

时间:2014-08-07 19:45:15

标签: java jar executable-jar

注意 - 我已经解决了这个问题,并将为其他人的利益发布答案。 请注意,我确实查看了此错误的其他答案,但他们并没有涵盖此处发生的事情。

C:\blah>type a.java
class a { public static void main(String[] args) { } }

编译

C:\blah>javac a.java

blah中的文件列表

C:\blah>dir /s/b
C:\blah\a.class
C:\blah\a.java
C:\blah\manifest

我在记事本中写的清单文件

C:\blah>type manifest
Main-Class: a
C:\blah>

创建jar

C:\blah>jar cvfm asdf.jar manifest -C . .
added manifest
adding: a.class(in = 247) (out= 187)(deflated 24%)
adding: a.java(in = 56) (out= 55)(deflated 1%)
adding: manifest(in = 13) (out= 15)(deflated -15%)

运行jar

C:\blah>java -jar asdf.jar
no main manifest attribute, in asdf.jar

我查看了问题的其他答案,他们建议添加清单文件

但清单文件在jar

C:\blah>jar -tf asdf.jar
META-INF/
META-INF/MANIFEST.MF
a.class
a.java
manifest

C:\blah>

1 个答案:

答案 0 :(得分:1)

当我在记事本中编写清单文件时,它最后没有新行。这就是导致错误的原因。

Windows使用CRLF作为行分隔符,而Linux使用LF作为行终止符。所以,当我在记事本中写了一行时,它最后没有CRLF。

但是java -jar jarfile.jar要求Manifest最后有一个新行(在本例中为CRLF)。我的最后没有任何东西。

C:\blah>type manifest
Main-Class: a
C:\blah>

创建jar文件

C:\blah>jar cvfm asdf.jar manifest -C . .
added manifest
adding: a.class(in = 247) (out= 187)(deflated 24%)
adding: a.java(in = 56) (out= 55)(deflated 1%)
adding: manifest(in = 13) (out= 15)(deflated -15%)

执行jar

C:\blah>java -jar asdf.jar
no main manifest attribute, in asdf.jar
我们将看到

失败,因为清单文件末尾没有新行

将新行添加到清单文件的末尾。这也可以在记事本中完成

C:\blah>echo.>>manifest

清单文件的内容

C:\blah>type manifest
Main-Class: a
C:\blah>

运行jar文件

C:\blah>java -jar asdf.jar
no main manifest attribute, in asdf.jar

失败,因为仍然是旧的jar文件; - )

创建jar文件..因为在清单文件中添加了新行

C:\blah>jar cvfm asdf.jar manifest -C . .
added manifest
adding: a.class(in = 247) (out= 187)(deflated 24%)
adding: a.java(in = 56) (out= 55)(deflated 1%)
adding: manifest(in = 15) (out= 17)(deflated -13%)

它运行良好没有错误

C:\blah>java -jar asdf.jar

C:\blah>