Java 运行jar时发现NoClassDef

Java 运行jar时发现NoClassDef,java,jar,noclassdeffounderror,Java,Jar,Noclassdeffounderror,我使用IntelliJ构建了一个jar,正确设置了主类 当我从命令行(Windows)运行“java-jar foo.jar”时,我得到一个异常,声称主文件丢失。主类类似于: package mypackage; public class LockUtil { public static void main(String[] args) { ... 我得到以下异常: Exception in thread "main" java.lang.NoClassDefFoundError:

我使用IntelliJ构建了一个jar,正确设置了主类

当我从命令行(Windows)运行“java-jar foo.jar”时,我得到一个异常,声称主文件丢失。主类类似于:

package mypackage;

public class LockUtil {
  public static void main(String[] args) {
  ...
我得到以下异常:

Exception in thread "main" java.lang.NoClassDefFoundError: mypackage/LockUtil
Caused by: java.lang.ClassNotFoundException: mypackage.LockUtil
        at java.net.URLClassLoader$1.run(Unknown Source)
        at java.security.AccessController.doPrivileged(Native Method)
        at java.net.URLClassLoader.findClass(Unknown Source)
        at java.lang.ClassLoader.loadClass(Unknown Source)
        at sun.misc.Launcher$AppClassLoader.loadClass(Unknown Source)
        at java.lang.ClassLoader.loadClass(Unknown Source)
        at java.lang.ClassLoader.loadClassInternal(Unknown Source)
Could not find the main class: mypackage.LockUtil. Program will exit.
清单文件包含:

Manifest-Version: 1.0
Created-By: IntelliJ IDEA
Main-Class: mypackage.LockUtil

jar包含适当的目录结构和.class文件。

您正在尝试执行
mypackage.LockUtil
,但是您应该使用
mypackage.locking.LockUtil
(注意类开头的
package
语句)


另一种可能是您移动了类,忘记了更新
语句。

您试图执行
mypackage.LockUtil
,但您应该使用
mypackage.locking.LockUtil
(注意类开头的
语句)


另一种可能是您移动了类,忘记了更新
语句。

您的包的名称似乎是mypackage.locking,而不仅仅是mypackage

您的包的名称似乎是mypackage.locking,而不仅仅是mypackage清单指向的是mypackage/LockUtil,而不是mypackage/locking/LockUtil


-Rick

清单中的主类定义似乎指向mypackage/LockUtil,而不是mypackage/locking/LockUtil


-里克

如果你使用java-tf foo.jar
,你会看到这样的东西吗

META-INF/
META-INF/MANIFEST.MF
mypackage/
mypackage/LockUtil.class
可能在那里的某个地方有另一个目录级别吗

通过使用以下内容构建jar文件,可以确保Java知道主文件在那里:

jar cfe foo.jar mypackage.LockUtil mypackage/LockUtil.class

如果您使用
java-tf foo.jar
,您会看到类似的情况吗

META-INF/
META-INF/MANIFEST.MF
mypackage/
mypackage/LockUtil.class
可能在那里的某个地方有另一个目录级别吗

通过使用以下内容构建jar文件,可以确保Java知道主文件在那里:

jar cfe foo.jar mypackage.LockUtil mypackage/LockUtil.class

LockUtil是否依赖于另一个不可解析的类,从而不允许加载LockUtil?

LockUtil是否依赖于另一个不可解析的类,从而不允许加载LockUtil?

抱歉,这是发布中的一个错误-尽管实际的包名是正确的。。。(我更新了问题)对不起,这是一个错误的张贴-实际的包裹名称是正确的,虽然。。。(我更新了问题)