繁体   English   中英

无法使用 Jar 文件找到或加载主 class

[英]Could not find or load main class with a Jar File

我正在尝试使用加载 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)

Package班级减速classes.TestClasspackage classes;

但我仍然不断收到错误消息

Could not find or load main class classes.TestClass

我已经解决了这个问题所能找到的所有问题,但似乎都无济于事。

我试过编辑类路径、重做清单、安装新的 JRE。

我还应该做什么?

我让它像这样工作:

测试类.Java

package classes;

public class TestClass {

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

}

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

清单文件

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

然后运行

jar cfm test.jar MANIFEST.MF classes/

然后运行它

java -jar test.jar

java -cp "full-path-of-your-jar" Main

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

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

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

错误的命令java jar test.jar

正确的命令java -jar test.jar

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

主类:classes.TestClass

2.创建罐子

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

3.运行jar作为

java -jar 测试.jar

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

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

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

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

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

由于从 Microsoft Word 文档复制和粘贴代码,我遇到了同样的问题。 似乎有一种稍微不同类型的破折号-使用的字符,当我用正确的字符替换较长的破折号时-程序正确执行

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

此时最可能出现的两个情况是,jar 中的文件未存储在 WITHIN THE JAR 的目录中,或者它不是正确的文件。

您需要存储 TestClass.class - 一些新人在此存储源文件 TestClass.java。

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

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

例子:

/folder1/folder2/folder3/executable.jar

所有 3 个文件夹(文件夹 1、文件夹 2 和文件夹 3)以及 executable.jar 都需要当前用户的执行权限,否则将返回错误“无法找到或加载主类...”。

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 用来为程序提供长类路径的方法。

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

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

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

2) 清单应如下所示:

Mainfest 版本:1.0 主类:com.test.myclass.MyClass 类路径:. 我的.jar

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

java -jar my.jar

希望这有助于某人

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

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

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

我有这个错误,因为我在我的MANIFEST.MF写了一个错误的类路径

如果您使用包名称,它将不适用于包含点的文件夹( 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'`

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

在 src 文件夹中放置和使用 lib 文件夹有效。

此错误消息的可能原因:

无法找到或加载主类

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

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

我有这个错误,因为我通过 IntellijIDEA 从库中提取 JAR 文件到目标 JAR。 当我选择另一个选项“复制到输出目录...”时,它解决了问题。 希望这对你有帮助

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

IntelliJ 的屏幕截图,显示“包含测试”复选框

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

<sourceDirectory>src</sourceDirectory>

如果您使用 Maven 项目进行设置——请确保以下内容与 pom.xml 文件中的 JDK 匹配。

<maven.compiler.source>17</maven.compiler.source> <maven.compiler.target>17</maven.compiler.target>

在我的情况下,我将它设置为 14,而我的应用程序设置为 14——冲突导致我的 jar 文件给出类未找到错误。

对于 IntelliJ 用户 - 当无法找到的 class 放置在标记为测试的目录中(目录图标上以绿色表示)时,也会发生这种情况。

要解决这个问题:

一个。 将 class 移动到源目录(首选)

或者

湾。 确保在创建工件时选中“包含测试”复选框

我在 IntelliJ 中使用工件时遇到了同样的问题。 使用复制所有依赖项 jar 后,它对我有用。

您需要使用-jar参数来设置您的 jar 的路径:

java -jar your_jar.jar

如果清单正确,则无需手动设置 main class。

我有一个incorret class-path librarie并解决相同的错误

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM