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

时间:2012-10-23 12:43:31

标签: java class jar main

我正在尝试使用

加载jar
@echo off
java -jar Test.jar
pause

带有

的清单
Manifest-Version: 1.0
Main-Class: classes.TestClass

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

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

classes.TestClass中的包减速为package classes;

但我仍然收到错误消息

Could not find or load main class classes.TestClass

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

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

我还应该做什么?

19 个答案:

答案 0 :(得分:21)

我得到了这样的工作:

<强> TestClass.Java

package classes;

public class TestClass {

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

}

在命令行上使用javac生成TestClass.class。将TestClass.class放在classes/文件夹中。

<强> MANIFEST.MF

Manifest-Version: 1.0
Main-Class: classes.TestClass

然后运行

jar cfm test.jar MANIFEST.MF classes/

然后将其作为

运行
java -jar test.jar

答案 1 :(得分:16)

  

java -cp“full-path-of-your-jar”Main

在某个包中运行任何其他具有“public static void main”的类,

  

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

答案 2 :(得分:9)

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

  

Main-Class:classes.TestClass

2.创建jar

  

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

3.运行罐子

  

java -jar test.jar

答案 3 :(得分:4)

我最后遇到了同样的问题,因为我复制并粘贴了单词代码,这是一种稍微不同的' - '字符,这是我能想到的,当我手动输入它时工作

答案 4 :(得分:2)

如果没有完整的信息,这很难调试。

此时最容易看到的两个问题是jar中的文件没有存储在JAR中的目录中,或者它不是正确的文件。

你需要存储TestClass.class - 这个商店的一些新人是源文件TestClass.java。

您需要创建jar文件,以便TestClass.class出现类路径。确保它不是“/ classes”。使用zip查看文件并确保它有一个“类”的路径。

答案 5 :(得分:2)

我有一个类似的问题,我可以通过为jar文件所在的所有父文件夹(在Linux系统上)授予执行权限来解决。

示例:

/folder1/folder2/folder3/executable.jar

所有3个文件夹(folder1,folder2和folder3)以及executable.jar都需要当前用户的execute-privilege,否则返回错误“找不到或加载主类...”。

答案 6 :(得分:1)

此错误消息的可能原因:

<块引用>

无法找到或加载主类

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

答案 7 :(得分:1)

在IntelliJ中,尝试将主项目文件夹中的lib文件夹添加到工件时出现此错误。

放置并使用src文件夹中的lib文件夹即可。

答案 8 :(得分:1)

如果使用程序包名称,则不适用于包含点(Error: Could not find or load main class)的文件夹。即使它成功编译并创建了jar文件。

相反,它需要完整的文件夹层次结构。

失败:

com.example.mypackage/
    Main.java

作品:

com/
    example/
        mypackage/
            Main.java

要在Linux上编译,请执行以下操作:

javac `find com/ -name '*.java'` \ && jar cfe app.jar com.example.mypackage.Main `find com/ -name '*.class'`

答案 9 :(得分:1)

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

命令错误 java jar test.jar

更正命令 java -jar test.jar

答案 10 :(得分:1)

我知道这是一个古老的问题,但是最近我遇到了这个问题,没有一个答案对我有帮助。但是,科拉尔(Corral)对赖安·阿特金森(Ryan Atkinson)的回答的评论确实使我意识到了这个问题。

我所有的编译后的类文件都放在target/classes中,在我的情况下这些文件不是软件包。我试图从我项目的根目录中使用jar cvfe App.jar target/classes App打包它,因为我的App类位于默认的未命名包中。

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

可以通过使用target/classes直接从jar cvfe App.jar . App目录创建jar来解决。我认为这很麻烦。

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

答案 11 :(得分:1)

MANIFEST.MF中的错误条目导致加载失败时,我遇到了一个奇怪的问题。这是我试图推出一个非常简单的scala程序的时候:

不正确:

Main-Class: jarek.ResourceCache
Class-Path: D:/lang/scala/lib/scala-library.jar

正确:

Main-Class: jarek.ResourceCache
Class-Path: file:///D:/lang/scala/lib/scala-library.jar

版本不正确,我得到了一个神秘的信息,就像OP一样。可能在解析清单文件时应该说出类似格式错误的url异常。

清单文件中使用绝对路径是IntelliJ用于为程序提供长类路径的方法。

答案 12 :(得分:1)

我按照以下说明在Eclipse中创建可执行文件.jar。然后运行命令“java -jar .jar”来启动程序。

它负责创建mainfest并为您包含主类和库文件部分。

http://java67.blogspot.com/2014/04/how-to-make-executable-jar-file-in-Java-Eclipse.html

答案 13 :(得分:1)

至少我这样做的方式如下:

如果您有一个嵌套的src树(比如com.test.myclass.MyClass)并且您要从根目录进行编译,则需要执行以下操作:

1)当你创建jar时(通常把它放在脚本中):     jar -cvfm my.jar com / test / myclass / manifest.txt com / test / myclass / MyClass.class

2)清单应该如下:

Mainfest-version:1.0 Main-Class:com.test.myclass.MyClass 类路径:。 my.jar

3)现在你可以从以下任何地方运行jar:

java -jar my.jar

希望这有助于某人

答案 14 :(得分:0)

通过FTP传输jar文件后,我收到了相同的错误消息,但忘记设置为二进制模式。

答案 15 :(得分:0)

我遇到此错误是因为我在MANIFEST.MF中写了错误的Class-Path

答案 16 :(得分:0)

我收到此错误是因为我的主类位于 test 包中,并且正在使用IntelliJ创建工件。当我在创建工件时选中包含测试框后,它就解决了。

Screenshot from IntelliJ showing Include Tests checkbox

答案 17 :(得分:0)

通过 maven 打包时,有时可能会丢失 pom.xml 中 <build> 标记下的以下行。因为 src 文件夹包含您的 java 文件

<sourceDirectory>src</sourceDirectory>

答案 18 :(得分:-1)

我有一个incorret类路径库,并解决了相同的错误