无法使用Jar文件查找或加载主类

Aus*_*tin 41 java program-entry-point jar class

我正在尝试使用加载jar

@echo off
java -jar Test.jar
pause
Run Code Online (Sandbox Code Playgroud)

随着的表现

Manifest-Version: 1.0
Main-Class: classes.TestClass
Run Code Online (Sandbox Code Playgroud)

在Jar目录中,当我提取它时,我可以清楚地看到classes\TestClass文件.

编辑:classes.TestClass确实有public static void main(String[] args).

包装减速度classes.TestClasspackage classes;

但我仍然收到错误消息

Could not find or load main class classes.TestClass
Run Code Online (Sandbox Code Playgroud)

我经历过这个问题所能找到的一切,但似乎没有任何帮助.

我已经尝试编辑类路径,重做清单,安装新的JRE.

我还应该做什么?

BeR*_*ive 23

我得到它像这样工作:

TestClass.Java

package classes;

public class TestClass {

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

}
Run Code Online (Sandbox Code Playgroud)

使用javac命令行上产生TestClass.class.放入TestClass.class一个文件夹classes/.

MANIFEST.MF

Manifest-Version: 1.0
Main-Class: classes.TestClass
Run Code Online (Sandbox Code Playgroud)

然后跑

jar cfm test.jar MANIFEST.MF classes/
Run Code Online (Sandbox Code Playgroud)

然后运行它

java -jar test.jar
Run Code Online (Sandbox Code Playgroud)

  • 我想在答案中隐含一点:重要的是"cd"到将用作类路径的路径,而TestClass.class在没有jar文件的情况下运行.例如,"cd/MyEclipseWorkspace/MyProject/bin"相反,如果jar使用类文件的绝对路径,则可能会因"无法找到或加载主类"错误而失败.例如,这是错误的:jar cfm test.jar manifest.txt /absolutepath/classes/TestClass.class (5认同)

小智 16

java -cp"full-path-of-your-jar"主要

在某些包中运行任何其他具有"public static void main"的类,

java -cp"full-path-of-your-jar"package1.package2.packages-hierarchy.ClassHavingMain

  • 请在您投票时添加说明. (3认同)

mGe*_*eek 13

即使您在单词 jar 之前错误地错过了“-”,也会出现此错误

命令错误 java jar test.jar

正确的命令 java -jar test.jar


Arh*_*ham 9

1.创建一个文本文件calles Manifest.txt并提供值为

Main-Class:classes.TestClass

2.创建罐子

jar cfm test.jar Manifest.txt classes/*.class

把罐子弄得像

java -jar test.jar


小智 8

我知道这是一个老问题,但我最近遇到了这个问题,但没有一个答案对我有帮助。然而,Corral 对 Ryan Atkinson 回答的评论确实让我注意到了这个问题。

我的所有编译类文件target/classes都在 . 我试图用jar cvfe App.jar target/classes App, 从我的项目的根目录打包它,因为我的 App 类在默认的未命名包中。

这不起作用,因为新创建的App.jarApp.class在目录中包含类target/classes。如果您尝试使用 运行此 jar java -jar App.jar,它会抱怨找不到App该类。这是因为里面App.jar的包与项目中的实际包不匹配。

这可以通过直接从target/classes目录创建 jar 来解决,使用jar cvfe App.jar . App. 这在我看来是相当麻烦的。

简单的解决方案是-C使用选项列出要添加的文件夹,而不是使用列出文件夹的默认方式。所以,就我而言,正确的命令是java cvfe App.jar App -C target/classes .. 这样就直接把target/classes目录下的所有文件都加到根目录下App.jar,从而解决问题。

  • 这是唯一对我有帮助的答案!谢谢你。除了将 (cd) 放入包含包/类的文件夹之外,还有其他方法吗? (4认同)

小智 7

出现此错误消息的可能原因:

无法找到或加载主类

是当主类扩展(或实现)另一个不在类路径上的类(或接口)时。


Max*_*oll 5

最后,我只是遇到了同样的问题,因为我将代码复制并粘贴到单词上,并且使用的字符类型稍有不同,这就是我手动输入时可以想到的所有内容。