1

我有一个看起来像这样的文件夹:

foo/
 Bar.java
 Bar.class
 Foo.java
 Foo.class
 manifest.mf

.java 文件都在一个名为 x 的包中:

package x;

我生成 .class 文件:

javac foo/*.java

然后我尝试打包为可运行的 jar 格式:

jar cmf foo.jar foo/manifest.mf foo/*.class

但我收到此错误:

 java.io.IOException: line too long
        at java.base/java.util.jar.Attributes.read(Attributes.java:381)
        at java.base/java.util.jar.Manifest.read(Manifest.java:228)
        at java.base/java.util.jar.Manifest.<init>(Manifest.java:80)
        at java.base/java.util.jar.Manifest.<init>(Manifest.java:72)
        at jdk.jartool/sun.tools.jar.Main.run(Main.java:264)
        at jdk.jartool/sun.tools.jar.Main.main(Main.java:1669)

manifest.mf 的内容只是:

Main-Class: x.Bar

它编译时javac不确定发生了什么,或者为什么它不喜欢清单文件,有人知道吗?

4

2 回答 2

5

我相信对于“jar cmf”命令,第一个参数应该是清单路径。如文档https://docs.oracle.com/javase/7/docs/technotes/tools/windows/jar.html中所述

您可以尝试在您的情况下使用下一个命令构建它吗?

jar cmf foo/manifest.mf foo.jar foo/*.class
于 2018-11-16T08:39:32.597 回答
3

正确的命令行将是

jar -c -m foo/manifest.mf -f foo.jar foo/*.class
于 2018-11-16T08:35:05.997 回答