运行jar时NoClassDefFound

时间:2009-07-02 15:09:07

标签: 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: 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文件的相应目录结构。

5 个答案:

答案 0 :(得分:2)

如果你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

答案 1 :(得分:1)

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

另一种可能性是你移动了课程并忘记更新package语句。

答案 2 :(得分:1)

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

答案 3 :(得分:0)

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

答案 4 :(得分:0)

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

-Rick