Java jar创建:尽管声明了这样的内容,但没有添加清单,META-INF\Manifest.MF的EOL是错误的

Java jar创建:尽管声明了这样的内容,但没有添加清单,META-INF\Manifest.MF的EOL是错误的,java,jar,manifest,Java,Jar,Manifest,我正试图创建一个exetubale jar文件,但它需要一个烦人的解决方法才能正常工作。我不明白原因。我使用的命令是 jar cvfm CSVTerminal.jar Manifest.txt csvterminal\csvprocessing\*.class csvterminal\*.class csvterminal\my_helpers\*.class 哪个输出 added manifest adding: csvterminal/csvprocessing/CSVList.class

我正试图创建一个exetubale jar文件,但它需要一个烦人的解决方法才能正常工作。我不明白原因。我使用的命令是

jar cvfm CSVTerminal.jar Manifest.txt csvterminal\csvprocessing\*.class csvterminal\*.class csvterminal\my_helpers\*.class
哪个输出

added manifest
adding: csvterminal/csvprocessing/CSVList.class(in = 14437) (out= 6960)(deflated 51%)
adding: csvterminal/csvprocessing/CSVListElement.class(in = 7022) (out= 3363)(deflated 52%)
adding: csvterminal/csvprocessing/Order.class(in = 2515) (out= 1212)(deflated 51%)
adding: csvterminal/csvprocessing/ValueListElement.class(in = 2692) (out= 1183)(deflated 56%)
adding: csvterminal/CSVTerminal$1.class(in = 550) (out= 354)(deflated 35%)
adding: csvterminal/CSVTerminal.class(in = 23555) (out= 11651)(deflated 50%)
adding: csvterminal/VariableCSVList.class(in = 2073) (out= 973)(deflated 53%)
adding: csvterminal/VariableCSVListElement.class(in = 1457) (out= 683)(deflated 53%)
adding: csvterminal/VariableList.class(in = 2001) (out= 966)(deflated 51%)
adding: csvterminal/VariableListElement.class(in = 1397) (out= 679)(deflated 51%)
adding: csvterminal/my_helpers/StringList.class(in = 3462) (out= 1554)(deflated 55%)
adding: csvterminal/my_helpers/StringListElement.class(in = 1997) (out= 901)(deflated 54%)
我的清单
manifest.txt
(UTF-8,CR-LF)是

但是.jar文件中产生的
META-INF\MANIFEST.MF

Manifest-Version: 1.0
Created-By: 1.8.0_211 (Oracle Corporation)


没有我的
Manifest.txt的痕迹

因此,
java-cp CSVTerminal.jar CSVTerminal.CSVTerminal
工作正常,但
java-jar CSVTerminal.jar
在以下情况下失败:

no main manifest attribute, in CSVTerminal.jar
现在我用7-zip包浏览器打开.jar,打开
META-INF\MANIFEST.MF
并添加缺少的行。仍然得到相同的错误!仔细检查后(使用记事本++),我意识到下线字符在
META-INF\MANIFEST.MF
中设置为
CR
!为什么?

因此我将其更改为
crlf
并保存。现在
java-jar CSVTerminal.jar
工作正常

所以我有办法使.jar可执行,但它真的很糟糕

我不明白为什么我的
Manifest.txt
会被忽略,即使它说它正在添加,我也不明白为什么EOL字符会被设置为
CR
,而这会导致问题(在创建.jar的同一个系统上!)?有人能解释这种行为吗

有关我的java安装的一些信息:

java version "1.8.0_211"
Java(TM) SE Runtime Environment (build 1.8.0_211-b12)
Java HotSpot(TM) 64-Bit Server VM (build 25.211-b12, mixed mode)

您需要将使用过的jar命令版本分别添加到包含它的JDK中,因为不同的版本需要不同的命令行选项。
java version "1.8.0_211"
Java(TM) SE Runtime Environment (build 1.8.0_211-b12)
Java HotSpot(TM) 64-Bit Server VM (build 25.211-b12, mixed mode)