如何使用终端创建一个.jar文件

25

我试图在Mac终端上创建一个.jar文件,但遇到了一些问题。我按照这里的步骤进行操作,但没有成功。我收到了以下错误消息:

Failed to load Main-Class manifest attribute from
aclient.jar

那么你应该如何去做呢?我的Java程序名为Main.java,我已经将其编译成了.class文件。现在我该怎么办呢?

谢谢。

5个回答

58

1) 确保所有必要文件都在该目录中,您已经打开了终端/命令提示符并导航至该目录。

2) 编译.java类,例如HelloWorld.java,使用以下命令:

javac HelloWorld.java

3) 这将生成一个JAR文件所需的.class文件。

4) 接下来使用文本编辑器创建一个清单文件(使用扩展名.txt保存),并输入以下内容

Main-Class: HelloWorld

或者你的文件名是什么都可以。

5) 接下来使用这段代码创建JAR文件:

jar cfm HelloWorld.jar Manifest.txt HelloWorld.class

6) 运行该文件:

java -jar HelloWorld.jar
如果有任何不清楚的地方,请参考以下网站:创建jar文件设置应用程序入口

希望这能对其他人有所帮助,祝愿Tom好运!
编辑:
根据inga的评论,值得注意的是,为了在jar文件中包含多个文件,您需要使用:
javac *.java

接着是

jar cfm HelloWorld.jar Manifest.txt *.class

1
谢谢!我在按照您的指示操作时遇到了一些麻烦,因为我的项目中有多个Java文件。起初,我以为只需要编译我的主类,但如果您有多个Java文件,则必须将它们全部编译,所以不是“javac HelloWorld.java”,而是“javac *.java”,而“jar cfm HelloWorld.jar Manifest.txt HelloWorld.class”将变成“jar cfm HelloWorld.jar Manifest.txt *.class”。仍然只需在Manifest文件中声明主类即可。希望这可以帮助那些犯了和我一样错误的人。 - inga
1
@inga 我已经更新了我的答案,包括你的评论。感谢提供信息! - Katana24
清单文件必须以换行符结尾,否则它将被静默地忽略。并且会出现“在*.jar中没有主清单属性”的错误。我将其添加为注释,因为这可能非常棘手,因为在其他方面所有代码都可以是正确的。 - StiggyStardust

8

是的,我们需要在类名末尾使用换行符...这对我有用

例如:Main-Class: HelloWorld

 It will look like this in Notepad++
 1.Main-Class: HelloWorld
 2.

你救了我的命。 - Egos Zhang

3
也许这可以帮助你关于 Manifest.txt 文件:
警告:该文本文件必须以换行符或回车符结尾。如果最后一行没有以换行符或回车符结尾,它将无法被正确解析。

2

我按照说明操作时,在加载Manifest.txt文件时遇到了问题。

在Manifest.txt文件中,我们只需要简单地写上 Main-class: class_name

但是,在以上语句后,请在Manifest.txt中按下回车键,这样您的Manifest.txt文件加载问题就会得到解决。Manifest文件末尾需要换行。

此致


太完美了!换行解决了我的问题。 - riccardogabellone

2

我按照您提供的链接创建了一个简单的示例。对于文本文件,内容只需为Main-Class: HelloWorld,还是应该有其他文本?此外,它应该保存为.txt文件还是.mf或其他格式? - Katana24
1
顺便说一下,即使我按照你的建议操作,仍然无法加载主类清单错误:/ - Katana24
尝试运行以下命令: % jar xvf foo.jar 创建:META-INF/ 解压缩:META-INF/MANIFEST.MF 解压缩:HelloWorld.class 然后查看 MANIFESTMF,它应该如下所示: Manifest-Version: 1.0 Created-By: 1.6.0_31 (Apple Inc.) Main-Class: HelloWorld - Tom J
我现在搞定了 - 我遵循了Sun网站上的建议,链接在这里http://docs.oracle.com/javase/tutorial/deployment/jar/appman.html,在“一个例子”部分下,虽然我不知道为什么它没有按照你所概述的方式工作。 - Katana24

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接