Вызывать методы класса в исполняемом файле jar? - PullRequest
0 голосов
/ 09 мая 2019

Я создал метод в классе Java, который выполняет некоторое шифрование. Этот класс использует методы из некоторых внешних файлов JAR. Автор запроса этого метода попросил включить мой класс и внешние файлы JAR в один файл JAR. Я использую Eclipse для моей IDE. Насколько я понимаю, мне нужно создать исполняемый файл JAR в Eclipse, чтобы упаковать внешние файлы JAR в свой собственный файл JAR. В моем проекте я также создал базовый класс с методом main в моем проекте, который просто вызывает мой метод, упомянутый выше (чтобы предоставить «основной класс» для конфигурации запуска для исполняемого файла jar). Я экспортировал свой проект в исполняемый файл jar и убедился, что он запускается (java -jar jar-file-name) в окне командной строки. Я создал второй тестовый проект в Eclipse и добавил свой исполняемый файл jar в путь сборки. В этом тестовом проекте я создал простой класс с основным методом, который вызывает метод, упомянутый выше (для класса в моем исполняемом jar-файле). Это скомпилировано, поэтому я экспортировал этот проект в обычный файл jar и попытался запустить его (с помощью java -classpath execute-jar-file-упомянутый выше; test-project-jar-file class-name. Это не удалось с NoClassDefFoundError , ссылаясь на класс, найденный в одном из внешних файлов jar.

Что мне здесь не хватает? Это мой первый опыт работы с исполняемым файлом JAR. Есть ли что-то особенное, что нужно сделать при вызове методов класса в исполняемом jar-файле?

1 Ответ

0 голосов
/ 09 мая 2019

В исполняемых файлах jar нет ничего особенного. Единственное отличие состоит в том, что исполняемый файл JAR определяет основной класс (с методом main()), который будет запускаться при запуске java -jar ....

Файл jar на самом деле представляет собой простой zip-файл, содержащий классы, ресурсы и некоторую дополнительную метаинформацию. Когда вы запускаете свой jar-файл и получаете ClassNotFoundException, это проблема с вашим путем к классу. Так что вы как-то упускаете классы, от которых вы зависите, находящиеся во внешней библиотеке.

Существует два способа решения вашей проблемы:

  1. Добавьте библиотечный jar в путь к классу, когда вы запустите свой исполняемый jar
  2. Упакуйте свой исполняемый файл jar, чтобы он содержал все классы из внешней библиотеки

Я не знаю, что делают функции экспорта Eclipse. Но я бы рекомендовал сначала взглянуть на экспортированный jar-файл, используя вашу любимую zip-утилиту. Я бы также порекомендовал использовать такой инструмент сборки, как maven, для создания вашей фляги. Вот пример того, как это можно сделать с помощью подключаемого модуля maven: https://www.mkyong.com/maven/create-a-fat-jar-file-maven-assembly-plugin/

...