Как правильно сделать файл java jar, используя этот make-файл с файлами в src / и bin / - PullRequest
2 голосов
/ 23 декабря 2010

У меня проблемы с созданием Jar-файла для реализации Java. Я не мастер Java (поэтому я использую Make, а не Ant). Я не думал, что мне небезразличен Jar, пока я не понял, что моя машина с Windows не имеет Javac. Тогда я подумал про себя: «Если бы у меня была банка»

Итак, я взломал несколько строк вместе в Makefile, пытаясь

Соответствующие строки:

all: client server jar

client: bin bin/Job.class bin/JobQueue.class bin/Client.class bin/FileTransfer.class

server: bin bin/Job.class bin/JobQueue.class bin/Server.class bin/ServerThread.class bin/FileTransfer.class

jar: client server
    jar cfe HBNQServer Server bin/Server.class bin/Job.class bin/JobQueue.class bin/ServerThread.class bin/FileTransfer.class
    jar cfe HBNQClient Client bin/Client.class bin/Job.class bin/JobQueue.class bin/FileTransfer.class

Однако, когда я пытаюсь запустить его, я получаю исключение No Class Found.

$ java -jar HBNQServer
Exception in thread "main" java.lang.NoClassDefFoundError: Server
Caused by: java.lang.ClassNotFoundException: Server
    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)

Я уверен, что ошибка очевидна для всех, кто более знаком с файлами "Jaring".

Если я пропущу какой-либо важный код, его можно найти Здесь

Ответы [ 2 ]

2 голосов
/ 23 декабря 2010

Я считаю, что ваша проблема - префикс bin. Если вы создаете файл класса, он должен находиться в каталоге, идентичном его полному имени пакета. Например, если вы реализуете класс com.mycompany.Server, соответствующий путь в файле jar должен быть com/mycompany/Server.class. В вашем случае все находится в каталоге bin в файле jar, поэтому он не может найти ваши (предположительно, не относящиеся к пакету) классы. Либо поместите все свои классы в пакет bin, либо встряхните их без префикса bin.

Что-то вроде этого может работать:

jar: client server
    cd bin; jar cfe ../HBNQServer Server Server.class Job.class JobQueue.class ServerThread.class FileTransfer.class
    cd bin; jar cfe ../HBNQClient Client Client.class Job.class JobQueue.class FileTransfer.class
1 голос
/ 23 декабря 2010

Вам необходим манифест для вашего JAR, как обсуждено здесь .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...