2013-04-13 2 views
0

Я новичок в JAVA и не могу понять, что случилось с проектом, который я создал.JAVA: невозможно запустить файл jar

Я создал проект JAVA в затмении и экспортировал банку (не запускаемую банку). Я не отмечен .project и .classpath параметры файла при экспорте. Теперь я пытаюсь запустить эту баночку и получая NoClassDefFoundError:

Я вставив команду и ошибки ниже:

C:\Users\Anjali>"C:\Program Files\Java\jre7\bin\java.exe" -classpath D:\Web\Hbas 
eGateway\bin;C:\Users\Anjali\Downloads\Hbase\hbase-0.94.5-security.jar;C:\Users\ 
Anjali\Downloads\Hbase\lib\hadoop-core-1.0.4.jar;C:\Users\Anjali\Downloads\Hbase 
\py4j0.7.jar -jar D:\Web\HbaseGateway\bin\HBaseGateway.jar 
Exception in thread "main" java.lang.NoClassDefFoundError: py4j/GatewayServer 
     at hbase.gateway.HBaseGatewayEntryPoint.main(HBaseGatewayEntryPoint.java 
:22) 
Caused by: java.lang.ClassNotFoundException: py4j.GatewayServer 
     at java.net.URLClassLoader$1.run(Unknown Source) 
     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) 
     ... 1 more 

Теперь, интересная вещь я могу запустить основной класс с помощью следующую команду. В приведенной ниже команде я удалил ключ -jar и передал основной класс java.exe.

C:\Users\Anjali>"C:\Program Files\Java\jre7\bin\java.exe" -classpath D:\Web\Hbas 
eGateway\bin;C:\Users\Anjali\Downloads\Hbase\hbase-0.94.5-security.jar;C:\Users\ 
Anjali\Downloads\Hbase\lib\hadoop-core-1.0.4.jar;C:\Users\Anjali\Downloads\Hbase 
\py4j0.7.jar hbase.gateway.HBaseGatewayEntryPoint 
Gateway Server Started 

Почему NoClassDefFoundError бросает? Я что-то упустил?

ответ

3

Для -jar варианта для работы, вы должны добавить Main-класс ключа в манифесте. отсылает описание команды Java http://docs.oracle.com/javase/1.5.0/docs/tooldocs/windows/java.html

-jar вариант

Выполнить программу, инкапсулированную в файле JAR. Первый аргумент - это имя файла JAR вместо имени класса запуска. Для того, чтобы этот параметр работал, манифест JAR-файла должен содержать строку формы Main-Class: classname. Здесь classname идентифицирует класс, имеющий открытый static static void main (String [] args) метод, который служит отправной точкой вашего приложения.

+0

У меня есть файл манифеста с основным классом как 'hbase.gateway.HBaseGatewayEntryPoint' ... Но у меня нет установленного jdk. Это имеет значение? – Mayank

+0

Идеально не должно. Попробуйте запустить java-команду без каких-либо параметров. Проверьте, отображается ли в help -jar опция или нет. – JRR

+0

есть. помощь показывает банку. Я проверил, что ему не нужен jdk :) – Mayank

0

Когда вы используете опцию -jar, путь к классам считывается из файла MANIFEST.mf. Из документов для варианта -jar:

When you use this option, the JAR file is the source of all user classes, and other user class path settings are ignored.

Это означает, что вы должны добавить все зависимости в Class-Path разделе файла манифеста.

Смежные вопросы