2009-07-02 4 views
0

Я построил банку, используя IntelliJ, правильно установив основной класс.NoClassDefFound при запуске фляги

Когда я запускаю «java -jar foo.jar» из командной строки (Windows), я получаю исключение, которое утверждает, что основной файл отсутствует. Основной класс выглядит примерно так:

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 

И баночка содержит соответствующую структуру каталогов с файл .class.

ответ

1

Вы пытаетесь выполнить mypackage.LockUtil, но вы должны использовать mypackage.locking.LockUtil (обратите внимание на инструкцию package в начале класса.).

Другая возможность заключается в том, что вы переместили класс и забыли обновить заявление package.

+0

Извините, это была ошибка в размещении - фактическое название пакета верно, хотя ... (я обновил вопрос) – ripper234

0

Кажется, что имя вашего пакета mypackage.locking и не только MyPackage

0

Оказывается, что ваше определение основного класса в манифесте указывает на MyPackage/LockUtil, а не MyPackage/блокировки/LockUtil.

-Rick

2

Если вы java -tf foo.jar, видите ли вы что-нибудь подобное?

META-INF/ 
META-INF/MANIFEST.MF 
mypackage/ 
mypackage/LockUtil.class 

Может ли быть что-то еще на другом уровне?

Вы можете быть уверены, что Java знает главный файл есть путем создания файла банку с чем-то вроде этого:

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

ли LockUtil есть зависимость от другого класса, который не разрешимы, тем самым не позволяя LockUtil загружать?