Создание файла .JAR не удается - PullRequest
1 голос
/ 04 февраля 2011

Я использую Eclipse, и у меня довольно простой проект, я сохраню вам код.Он работает просто отлично и работает очень хорошо.В нем два файла .java, на самом деле дерево проекта выглядит так:

**mewLog**  
 - src/ (dir)   
   mewlog/ (package)  
    - MLGlobal.java  
    - MLMain.java (surprise, this one contains main and some initialization methods)    
   mlGUI/ (package)  
     - this one is empty (empty package!)  

Итак, я иду в Файл -> Экспорт.Я следую за действиями как обычно, и это делает мой .JAR файл просто без каких-либо предупреждений или проблем.Хорошо!

Пока все хорошо, можно сказать, что я спешу к своему терминалу, перехожу в папку, в которую экспортировал мой флягу, и выполняю ее следующим образом:

java -jar mewLog_macosx-x86.jar

BAM!Здесь все идет не так, терминал выдает мне следующий вывод:

Exception in thread "main" java.lang.NoClassDefFoundError: MLMain
Caused by: java.lang.ClassNotFoundException: MLMain
    at java.net.URLClassLoader$1.run(URLClassLoader.java:202)
    at java.security.AccessController.doPrivileged(Native Method)
    at java.net.URLClassLoader.findClass(URLClassLoader.java:190)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:307)
    at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:301)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:248)

ОК.Прежде чем сказать: «О, черт возьми, ты должен добавить путь к классу».Я пытался, это не работает, просто дает мне "BLAH" независимо от того, что я делаю.

Я использую Mac OS X Snow Leopard.

Вывод из jar -tf mewLog_MacOSX-x86.jar

jar -tf mewLog_MacOSX-x86.jar  
META-INF/MANIFEST.MF  
.project  
.classpath  
mewlog/MLGlobal.class  
mewlog/MLMain.class

Ответы [ 6 ]

2 голосов
/ 04 февраля 2011

делает

java -cp mewLog_macosx-x86.jar mewlog.MLMain

работа?

если это так, то ваш файл манифеста в банке указывает на неправильный основной класс (без учета пакета)

1 голос
/ 04 февраля 2011

Ваша проблема в том, что основной класс должен быть указан с его полным именем, то есть с пакетом.Java ищет класс MLMain, что означает, что он смотрит прямо в корень пути к классу.Но ваш класс mewlog.MLMain, внутри пакета mewlog.

1 голос
/ 04 февраля 2011

Прежде всего, файлы .java не попадают в файлы JAR - файл .class делает. JVM не может выполнять файлы .java. Вы должны сначала скомпилировать их.

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

Лучше оставить Eclipse вне его и сделать это вручную в первый раз. Используйте инструмент jar.exe в каталоге / bin.

Вот ссылка, которая может (или не может) помочь вам.

0 голосов
/ 04 февраля 2011

Я бы предложил

  1. создать файл JAR из командной строки с помощью java -jar и ознакомиться с процессом сборки.См. http://download.oracle.com/javase/tutorial/deployment/jar/basicsindex.html

  2. Установка плагина Fatjar для Eclipse из http://fjep.sourceforge.net/

0 голосов
/ 04 февраля 2011

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

Попробуйте это в терминале:

$cat Hola.java
package hola;

class Hola {
        public static void main( String ... args ) {
                System.out.println("Hola mundo!");
        }
}

$cat  m.mf
Main-Class: hola.Hola

$javac -d . Hola.java


$jar -cmf m.mf hola.jar hola

$java -jar hola.jar
Hola mundo!

Затем сравните содержимоеваш jar и посмотрите, что отличается (кроме очевидных разных имен классов)

Суть в том, чтобы определить, правильна ли структура вашего файла jar (предоставление вывода jar -tf mewLog_macosx-x86.jar также поможет)

Надеюсь, это поможет.

0 голосов
/ 04 февраля 2011

Глупый вопрос, но вы выбрали «Файл-> Экспорт-> Java-> JAR-файл» или «Файл-> Экспорт-> Java-> Выполненный JAR-файл»? JAR по умолчанию не запускается, если файл Manifest.MF не сообщает виртуальной машине, что является основным классом.

...