Java 将jar.exe与清单文件一起用于可执行文件-“;无主清单属性“;

Java 将jar.exe与清单文件一起用于可执行文件-“;无主清单属性“;,java,jar,executable-jar,manifest.mf,Java,Jar,Executable Jar,Manifest.mf,我搜索了谷歌和StackOverflow,寻找解决方案,但到目前为止还没有找到。我正在尝试使用Java1.8从Windows命令行使用清单文件生成一个简单的可执行.jar包。有关档案包括: Turtlephilia.java: public class Turtlephilia { public static void main(String[] args) { System.out.println("i lurrrve turtles"); } } manif

我搜索了谷歌和StackOverflow,寻找解决方案,但到目前为止还没有找到。我正在尝试使用Java1.8从Windows命令行使用清单文件生成一个简单的可执行.jar包。有关档案包括:

Turtlephilia.java:

public class Turtlephilia {
    public static void main(String[] args) {
        System.out.println("i lurrrve turtles");
    }
}
manifest.mf:

Main-Class: Turtlephilia
do.bat:

javac Turtlephilia.java

jar cvmf manifest.mf Turtlephilia.jar Turtlephilia.class 

java -jar Turtlephilia.jar
当我执行do.bat时,它会成功编译并存档,但在运行jar文件时,它会生成以下错误:

no main manifest attribute, in Turtlephilia.jar
注意:我实际上能够使用以下命令成功运行它:

java -cp Turtlephilia.jar Turtlephilia
但我需要它是一个可执行的jar


我做错了什么?这有多难

我找到了原因

我在记事本中创建了manifest.mf文件,并为Main类创建了一行

事实证明,在这一行之后需要回车符才能识别它,即在末尾有一个空行


在这几个小时里,我的头撞在墙上,我并没有被Java开发环境所吸引

您是否碰巧使用记事本创建了manifest.mf?我怀疑在开头有一个不可见(BOM)字符,这意味着该行在技术上不是以
Main Class
开头的。解决方案:在
Main Class
上方添加一个空行。我确实在记事本中进行了编辑,但添加一个空行后,我遇到了相同的问题。顺便说一句,我注意到,如果我将.jar拖到Netbeans中并查看一下,那么在META-INF\MANIFEST.ms下的包中,它有一个默认的清单,清单版本为:1.0,创建人:…,没有我的主类行。只是完全忽略了我的清单文件吗?天啊。你在正确的轨道上。Main类是清单文件中的最后一行,它后面需要回车符。记事本不是源代码编辑器。使用记事本并责怪Java就像用
wget
浏览网页,责怪StackOverflow难以使用。我不同意。无法处理尾随空格的存在/不存在是非常糟糕的,失败时无法生成任何有用的警告会加剧这种糟糕。不管怎样,IDE是否经常在文本文件中添加尾随空格?我想不会,那为什么他们会有什么不同呢?大体上我同意你的看法;程序应该优雅地失败。但这种优雅是有限度的——你不能指望程序在面对挑战时总是表现得合理。你的假设虽然合理,但并不正确。文本文件()和记事本无法在文件末尾添加新行,这是其不良行为。