【问题标题】:Trouble Creating an executable Java Jar file创建可执行 Java Jar 文件时遇到问题
【发布时间】:2010-08-16 17:21:41
【问题描述】:

我有以下 Java 代码。它完成了它应该做的事情,但是我在创建 jar 文件时遇到了问题。

import java.io.*;
public class openfile{
    public static void main(String argv[]) {
        try {
                String line;
                Process p = Runtime.getRuntime().exec
                ("c:\\Users\\user\\Desktop\\"+ "shares.bat /A");
                 BufferedReader input =
                 new BufferedReader
                 (new InputStreamReader(p.getInputStream()));
                 input.close();
                }
           catch (Exception err) {
                  err.printStackTrace();
               }
    }
}

编译没问题,使用java openfile运行也没问题。当我尝试使用以下命令创建 jar 文件时出现问题:

  jar cf MyJar.jar manifest.txt openfile.java openfile.class

但是,当我尝试使用运行 jar 时

java -jar MyJar.jar

我收到以下错误消息:

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

manifest.txt文本如下:

Main-Class: openfile 

知道我做错了什么吗?

【问题讨论】:

    标签: java executable-jar


    【解决方案1】:

    我相信我遇到了问题。

    在您的 manifest.txt 文件中

    manifest.txt文本如下:

    Main-Class: openfile 
    

    你需要在最后一行之后提供一个换行符

    所以只需在此行之后输入 Enter (

    Main-Class: openfile 
    

    请参阅this sun 文档。这是摘录。

    警告:文本文件必须以 换行或回车。最后 如果行将无法正确解析 不以新行结尾或 回车。

    我对此进行了验证,并且可以正常工作。 希望这会有所帮助。

    【讨论】:

    • 您好,感谢您的回复。试过这个仍然得到同样的错误。我从头开始。删除旧的 manifest.txt,在新文件中键入该行并按 Enter 按钮(使光标位于新行上),保存文件并创建新的 jar 文件。没有区别。
    • 我认为你没有使用 jar cfm MyJar.jar manifest.txt openfile.class openfile.java 你应该使用 m 选项,否则它将提供一个没有类定义的默认清单文件。我再次重新检查..我工作完美..你错过了 m 选项
    【解决方案2】:

    假设您有一个声明了 main 方法的类 openfile,那么这应该可以工作:

    jar cvef MyJar.jar openfile openfile.class
    

    如果您已经有一个清单并想要包含它,那么试试这个:

    jar cvmf MyJar.jar manifest.txt openfile.class
    

    【讨论】:

    • 嗨,尝试了这个答案的两个版本,但无济于事。
    【解决方案3】:

    您的清单文件的内容必须是这样的:

    清单版本:1.0
    主类:openfile

    这两行之后必须留空行,否则可能会造成问题。

    【讨论】:

    • 嗨,试过了,还是有同样的问题。如果您查看上面的两个答案,它似乎并不想工作。我的系统是否可能存在配置问题?
    • 尝试解压文件并查看内容。内容必须是:1)包含 manifest.txt 文件的 Meta-Inf 文件夹 2)和 otherfile.class 文件(在 meta-inf 文件夹之外)如果存在,它应该可以工作。
    • HI Logan,提取 jar 文件,它包含 openfile.class 文件和一个 META-INF 文件夹,其中包含一个包含以下内容(超过 3 行)的清单文件:Manifest-Version: 1.0 Created-作者:1.6.0_21(Sun Microsystems Inc.) 主类:openfile 但我仍然遇到同样的错误。我的 java 配置可能有问题吗?
    • 我不确定 java 配置。删除由...........创建的行,并确保在主类行之后有一个空白行。如果该空白行不存在,则 jar 将无法工作。 (我的意思是空行,转到 Main-Class 之后的行,然后按一次回车)。祝你好运。
    • 另外,我的 Manifest 文件扩展名为 .MF,请尝试更改它,如果可行,请告诉我。
    猜你喜欢
    • 2019-09-07
    • 2013-06-22
    • 2018-07-20
    • 2015-12-24
    • 2023-03-07
    • 2014-09-23
    • 2011-12-03
    • 1970-01-01
    • 2011-11-14
    相关资源
    最近更新 更多