【问题标题】:ClassNotFoundException problems with manifest in created JAR创建的 JAR 中的清单存在 ClassNotFoundException 问题
【发布时间】:2013-04-26 15:27:39
【问题描述】:

我正在尝试从我的源创建一个 JAR 文件,但是当我运行它时,我得到类未找到异常 - 它找不到主类,即使我在 MANIFEST.MF 文件中定义了它。请问有什么错误吗?

我的 JAR 结构:

META-INF/
META-INF/MANIFEST.MF
main/
main/java/
main/java/ThreadWatcher.java
main/java/WatcherObject.java
main/resources/
main/resources/WatcherObjectType.java
main/resources/TLogger.java
main/resources/DataProvider.java
main/resources/WatcherObjectStatus.java
main/resources/SettingsProvider.java

main/java/WatcherObject.java 包含 main 方法。

我的 MANIFEST.MF:

Manifest-Version: 1.0
Created-By: 1.6.0_27 (Sun Microsystems Inc.)
Main-Class: main.java.ThreadWatcher

当我运行它时,我得到:

Exception in thread "main" java.lang.NoClassDefFoundError: main/java/ThreadWatcher
Caused by: java.lang.ClassNotFoundException: main.java.ThreadWatcher
    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)
Could not find the main class: main.java.ThreadWatcher. Program will exit.

感谢您的帮助!

【问题讨论】:

  • 如果WatcherObject包含main方法,为什么要设置ThreadWatcher为主类?
  • 您应该在 JAR 中编译了 .class 文件,而不仅仅是源代码。

标签: java jar classnotfoundexception manifest.mf


【解决方案1】:

问题很可能是您包含 java 源文件,而不是编译的类文件。当您加载一个类时,JVM 默认会查找具有该给定名称的类文件并尝试加载它。由于您没有任何类文件,因此无法加载该类。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-12-26
    • 2011-04-17
    • 2020-08-19
    • 2014-05-23
    • 1970-01-01
    • 2011-06-29
    • 2020-10-22
    • 1970-01-01
    相关资源
    最近更新 更多