Создание файла JAR с несколькими зависимостями классов - PullRequest
0 голосов
/ 18 января 2011

Я пытаюсь запустить файл JAR, который я сделал, я получаю эту ошибку:

     java -jar Client.jar
Exception in thread "main" java.lang.NoClassDefFoundError: Client (wrong name: Client/Client)
    at java.lang.ClassLoader.defineClass1(Native Method)
    at java.lang.ClassLoader.defineClassCond(ClassLoader.java:632)
    at java.lang.ClassLoader.defineClass(ClassLoader.java:616)
    at java.security.SecureClassLoader.defineClass(SecureClassLoader.java:141)
    at java.net.URLClassLoader.defineClass(URLClassLoader.java:283)
    at java.net.URLClassLoader.access$000(URLClassLoader.java:58)
    at java.net.URLClassLoader$1.run(URLClassLoader.java:197)
    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)

Я использовал эту команду

jar cmf Client.mf Client.jar Client.class Client.java Client

, где Client.mf:

  Manifest-Version: 1.0
  Main-Class: Client

Последний аргумент - это папка, содержащая все классы зависимостей:

ButtonListen.class
ButtonListener.class
Client$1.class
Client$2.class
Client$3.class
NewPage.class
NewPage.java
NextPage.class
NextPage.java
OptIPDemo$1.class
OptIPDemo$2.class
OptIPDemo$3.class
OptIPDemo$4.class
OptIPDemo$5.class
OptIPDemo$Doc$1.class
OptIPDemo$Doc.class
OptIPDemo.class
OptIPDemo.java
ServerStats.class
ServerStats.java
blue2.jpeg
blue3.JPG

По какой-то причине он дает мне NoClassDefFoundError, но я не знаю, почему или как его разрешить.

Ответы [ 2 ]

2 голосов
/ 18 января 2011

Client.class, похоже, отсутствует.И я привык бы использовать пакеты для организации вашего кода.

1 голос
/ 18 января 2011

Вам нужно либо скомпилировать с -d

javac -d classes

... или переместите все ваши классы в каталог классов / клиентов

mkdir classes/Client
mv *.class classes/Client

Затем настройте свой манифест, чтобы использовать квалифицированный для пакета Main-Class:

Main-Class: Client.Client

И, наконец, создайте jar так, чтобы классы находились в каталоге Client jar:

cd classes
jar cmf ../Client.mf ../Client.jar *
...