Почему исполняемый jar не распознает jar внутри? - PullRequest
0 голосов
/ 28 ноября 2011

Я сделал исполняемый файл jar, который зависит от других файлов jar, с помощью командной строки в формате

jar cvfm MyJarName.jar manifest.txt *.class dependentJar1.jar dependentJar2.jar

Файл jar был создан правильно, и все выглядело нормально ... Но при запуске он получает ошибки времени выполнения, потому чтоон не может найти файлы классов, на которые ссылается мой проект.Изучая созданный jar, остальные 2 jar, от которых он зависит, находятся там, где они должны быть, и они перечислены в пути к классу manifest.mf, но по какой-то причине java тупой и фактически не заглядывает внутрь этих jar.

Когда эти 2 jar находятся в той же директории, что и jar владельца, java может найти их и работает нормально.Но я не хочу этого;Я хочу, чтобы эти банки действительно были ВНУТРИ.В чем дело?Как я могу сделать исполняемый файл jar с другими файлами внутри него?

Ответы [ 3 ]

3 голосов
/ 28 ноября 2011

Вы можете использовать что-то вроде OneJar или jarjar (или любой из нескольких других), чтобы упаковать все в одну банку.

Если выПри сборке с Maven вы можете использовать Maven Shade Plugin .

Вы можете использовать собственный загрузчик классов, такой как JarClassLoader , который позволит именно то, что вы хотите.

0 голосов
/ 28 ноября 2011

Если вы используете Ant Builder в Eclipse и помещаете указанные jar-файлы в библиотеку, доступную для вашего проекта, Eclipse извлечет необходимые классы и включит их в ваш распространяемый jar-файл.

0 голосов
/ 28 ноября 2011

Не думаю, что ты мог. Может быть, это как-то возможно с настроенным загрузчиком классов, но не из коробки. Используйте плагин Maven Shade.

...