60

我正在尝试使用

@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.TestClasspackage classes;

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

Could not find or load main class classes.TestClass

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

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

我还应该做什么?

4

19 回答 19

30

我让它像这样工作:

测试类.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
于 2012-10-23T12:59:05.810 回答
19

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

错误的命令 java jar test.jar

正确的命令 java -jar test.jar

于 2019-08-29T20:16:33.370 回答
18

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

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

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

于 2013-08-30T04:27:41.143 回答
11

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

主类:classes.TestClass

2.创建罐子为

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

3.运行jar

java -jar test.jar

于 2012-10-23T12:54:14.373 回答
9

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

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

这不起作用,因为新创建App.jar的类将App.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,从而解决问题。

于 2018-12-04T20:53:49.330 回答
7

I had the same problem due to copying and pasting code from a Microsoft Word Document. Seems there was a slightly different type of dash - character used, when I replaced the longer dash character with the correct - the program executed properly

于 2013-08-03T18:52:28.870 回答
3

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

此时最有可能发生的两件事是 jar 中的文件未存储在 JAR 内的目录中,或者它不是正确的文件。

您需要存储 TestClass.class - 这里有些新人存储源文件 TestClass.java。

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

于 2012-10-23T12:55:52.273 回答
3

此错误消息的可能原因:

无法找到或加载主类

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

于 2021-03-29T06:27:57.420 回答
2

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

于 2018-01-11T10:38:02.593 回答
2

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

例子:

/folder1/folder2/folder3/executable.jar

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

于 2015-09-24T09:59:13.863 回答
1

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

如果你有一个嵌套的 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

希望这可以帮助某人

于 2014-10-02T00:55:04.323 回答
1

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

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

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

于 2015-05-26T21:38:13.020 回答
1

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

在 src 文件夹中放置和使用 lib 文件夹是可行的。

于 2020-11-11T11:06:33.703 回答
1

我有这个错误是因为我在我的MANIFEST.MF

于 2018-11-23T10:35:59.860 回答
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'`

于 2020-04-28T16:44:43.827 回答
0

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

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

于 2020-09-26T20:59:35.597 回答
0

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

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

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

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

于 2022-01-09T05:31:13.763 回答
0

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

于 2020-01-20T17:40:04.513 回答
0

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

<sourceDirectory>src</sourceDirectory>
于 2021-02-12T13:39:55.497 回答