Java jar创建:尽管声明了这样的内容,但没有添加清单,META-INF\Manifest.MF的EOL是错误的
我正试图创建一个exetubale jar文件,但它需要一个烦人的解决方法才能正常工作。我不明白原因。我使用的命令是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
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)