【问题标题】:How to create a .jar file using the terminal如何使用终端创建 .jar 文件
【发布时间】:2012-04-24 22:06:07
【问题描述】:

我正在尝试使用 mac 终端创建一个 .jar 文件,但遇到了一些麻烦。我按照here 的步骤操作,但没有成功。我收到此错误消息:

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

那么你到底是怎么做的呢?我的 java 程序称为 Main.java,我已将其编译为 .class 文件。现在我该怎么办?

谢谢

【问题讨论】:

    标签: java jar terminal


    【解决方案1】:

    你需要有一个文本文件来定义主要的 班级。例如

    % cat MyMain
    Main-Class: HelloWorld
    

    然后

    %jar cvfm foo.jar MyMain *.class
    %java -jar foo.jar
    Hello world 
    

    请参阅:http://java.sun.com/j2se/1.4.2/runtime.html#example

    【讨论】:

    • 我按照您的链接创建了一个简单的示例。文本文件的内容只是 Main-Class: HelloWorld 或者那里应该有一些其他的文本。还应该将其保存为 .txt 文件还是 .mf 或其他文件?
    • 顺便说一句,即使遵循您的建议,我仍然无法 loa Main-Class manifest 错误:/
    • 尝试 % jar xvf foo.jar created: META-INF/ inflated: META-INF/MANIFEST.MF inflated: HelloWorld.class 然后看看 MANIFESTMF 它应该看起来像 Manifest-Version: 1.0创建者:1.6.0_31(Apple Inc.)主类:HelloWorld
    • 我现在开始工作了 - 我遵循了 Sun 网站上的建议 docs.oracle.com/javase/tutorial/deployment/jar/appman.html 在示例部分下,但我不知道为什么根据你概述的内容它不起作用
    【解决方案2】:

    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
    

    如果有任何不清楚的地方,请访问以下网站: creating a jar filesetting an applications entry point

    希望这对其他人有所帮助,汤姆欢呼!

    编辑:

    根据 inga 的评论,值得注意的是,为了在 jar 中包含多个文件,您需要使用:

    javac *.java
    

    紧随其后

    jar cfm HelloWorld.jar Manifest.txt *.class
    

    【讨论】:

    • 谢谢!我按照您的指示遇到了一些麻烦,因为我的项目中有多个 java 文件。起初我以为我只需要编译我的主类,但是如果你有多个 java 文件,你必须全部编译它们,所以你必须做 "javac *.java" 和 "jar cfm" 而不是 "javac HelloWorld.java" HelloWorld.jar Manifest.txt HelloWorld.class”将是“jar cfm HelloWorld.jar Manifest.txt *.class”。您仍然只需要在 Manifest 文件中声明主类。如果有人犯了我犯的同样错误,希望这会有所帮助。
    • @inga 我已经更新了我的答案以包括您的 cmets。感谢您的信息!
    【解决方案3】:

    也许这将有助于重新 Manifest.txt 文件:

    警告:文本文件必须以换行符或回车符结尾。如果最后一行没有以换行符或回车符结尾,则无法正确解析。

    【讨论】:

      【解决方案4】:

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

      即主类:HelloWorld

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

      【讨论】:

      • 你救了我的命
      【解决方案5】:

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

      在 Manifest.txt 我们只需要写 主类:class_name

      但是在上述声明之后,请在 Manifest.txt 中按回车键,您的 Manifest.txt 加载问题将得到解决。清单文件末尾的新行是必需的。

      问候

      【讨论】:

      • 完美!新行解决了我的问题
      猜你喜欢
      • 2018-11-06
      • 1970-01-01
      • 2014-03-22
      • 1970-01-01
      • 1970-01-01
      • 2020-02-22
      • 2010-11-19
      • 2013-08-01
      • 1970-01-01
      相关资源
      最近更新 更多