无法运行jar文件:无法找到或加载主类Hello

问题描述:

我在IDEA Build> Build Artifacts中创建jar文件。但无法运行java -jar jarname.jar - Error: Could not find or load main class Hello。 MANIFEST.MF文件位于/ resources/META-INF /文件夹中。这里是发射器类:无法运行jar文件:无法找到或加载主类Hello

public class Hello { 

    public static void main(String[] args) { 
     System.out.println("Hello World!"); 
    } 

} 

MANIFEST.MF:

Manifest-Version: 1.0 
Main-Class: Hello 

enter image description here


编辑:添加文物设置截图

enter image description here

+0

是什么在你的清单文件? – RaGe

+0

检查你的jar文件,看看是否包含类文件。当您使用IntelliJ配置工件构建时,必须指定要包含类,src或两者。 – Brion

+0

仔细阅读我的问题。它显示了MANIFEST文件 –

enter image description here

你去项目结构,然后选择从左边的选项卡“神器”。添加一个新的工件,正如你在这里看到的,尽管我选择了一个清单并选择了一个Main类,在左边显示了它将添加到jar中的内容。在右侧显示有哪些可用(未添加)。然而,由于我还没有添加任何东西到我的jar中,它只会添加Manifest而不是实际的代码。

您需要指定要将编译输出添加到jar,否则它只会具有清单而不是实际的类。你可以通过双击它来做到这一点。如果你指定编译输出上面的目录,它也会添加src,我相信。

更新:添加外部依赖

enter image description here

enter image description here

+0

它的工作原理。但是,当我添加apache io库fot测试并启动.jar时,发生错误: 'java.lang.NoClassDefFoundError:org/apache/commons/io/FileUtils at Hello.main(Hello。java:10)' 我明白包含库的问题,但不知道如何包含它们 –

+0

org.apache.commons.io.FileUtils不是标准库,因此程序正在从中绘制依赖关系。当带有绿色+图标的新工件时,指定您要使用依赖而不是空来创建。我会用几个屏幕截图更新答案,以帮助解决。 – Brion

我相信你的清单文件必须说明什么是主类,如果你想它自动执行。

Main-Class: Hello

否则,您需要在尝试执行该jar时在命令行上指定它。至于如何用IntelliJ来做到这一点,我无法帮到你。

java -cp hello.jar Hello

注意,参考类的主要方法是完全合格的位置(package.classname),但因为你的类有默认的包,它不是必需的。

+0

用'java -cp hello.jar你好'我得到了'错误:找不到或者加载主类你好' –

+0

那么你需要验证你的jar是否被正确创建,意思是你的jar文件中的Hello.class – loesak