Java Can';“我不知道如何运行我的jar文件”;无法找到或加载主类“;

Java Can';“我不知道如何运行我的jar文件”;无法找到或加载主类“;,java,Java,我试图创建一个jar文件,并使用java-cp main.jar com.test.Foo.main运行它,但我一直得到: Error: Could not find or load main class com.test.Foo.Main Caused by: java.lang.ClassNotFoundException: com.test.Foo.Main 这是我的文件结构。所以我认为我的Main.java中的行应该是package com.test.Foo正确吗 我正在用javac

我试图创建一个jar文件,并使用
java-cp main.jar com.test.Foo.main
运行它,但我一直得到:

Error: Could not find or load main class com.test.Foo.Main
Caused by: java.lang.ClassNotFoundException: com.test.Foo.Main
这是我的文件结构。所以我认为我的
Main.java
中的行应该是
package com.test.Foo
正确吗

我正在用
javacmain.java
编译我的
Main.java
,它输出一个
Main.class
文件。之后,我使用
jar cfm main.jar META-INF/MANIFEST.MF main.class
创建了一个jar文件,最后当我与jar文件
/src/com/test/Foo/
位于同一目录时,我运行
java-cp main.jar com.test.Foo.main
,这时我遇到了上述错误。你知道我如何像这样运行这个文件吗(是的,我需要它专门使用这个命令运行)

Main.java

package com.test.Foo;

public class Main {
  public static void main (String args[]) {
    System.out.println("I am com.test.Foo.Main");
  }
}
META-INF/MANIFEST.MF

Manifest-Version: 1.0
Main-Class: com.test.Foo.Main

我尝试使用中给出的一些选项,但没有任何帮助。

该类名为
com.test.Foo.Main
您需要在命令中指定全名:

java -cp main.jar com.test.Foo.Main
或者您可以使用更简单的

java -jar main.jar

检查META-INF/MANIFEST.MF中的
清单版本:1.0

该属性必须存在


编辑:

您需要移动到源根目录
src/
,并发出下面的命令来创建一个有效的jar

javac com/test/Foo/*.java

然后,使用

jar cmf com/test/Foo/MANIFEST.MF main.jar com/test/Foo/*.class

问题是,包结构显然应该与文件夹结构相匹配

你在问题中展示的图片是你的项目结构,而不是你的jar结构

创建jar文件时,该jar文件的结构可能是 与源代码文件夹结构不同

每个IDE(如eclipse、netbeans、IntelliJ)都有一个创建JAR文件的机制。在您的情况下,当您打开创建的jar文件(使用winrar之类的zip应用程序)时,您应该会看到如下内容:

com
  |
  test
     |
     Foo
       |
       Main
META-INF
       |
       MANIFEST.MF
这应该是文件和文件夹的顺序,否则Java无法从MANIFEST.MF

Manifest-Version: 1.0
Main-Class: com.test.Foo.Main
现在要解决这个问题:

  • 使用类似winrar的zip应用程序打开jar文件
  • 在我绘图时检查驻留在jar文件中的文件夹结构
  • 在winrar中立即修复它,或者尝试更正您的项目结构以生成我提到的结构

  • “Main”对一个类来说可能是个坏名字。。。但听起来您的问题是忘记了“Foo”:CHANGE MANIFEST.MF:
    Main类:com.test.Foo.Main
    。我还建议:
    java-jarmain.jar
    。很抱歉,我刚刚将其添加到错误中。即使我包含
    Foo
    -
    java-cp main.jar com.test.Foo
    我也会遇到同样的问题。我不确定什么是
    pom
    文件,所以我要说不。这应该是我的下一步吗?如何创建jar文件?你的IDE是什么?@Mehdi,所以我使用
    jar cfm main.jar META-INF/MANIFEST.MF main.class
    创建jar文件,对于这个测试项目,我只使用VSCode。通常,我会使用IntelliJ。因此运行
    java-jarmain.jar
    会在main.jar中返回
    无主清单属性。如果我在对所有内容进行jaring时包含清单文件,那么会发生这种情况的原因是什么?也不起作用,我尝试将其添加到文件的顶部和底部,但仍然不起作用。@BrandonBenefield编辑了答案,以正确的方式生成jar。