Во-первых, я прочитал много С.О. вопросы по этой теме, и я пробовал вещи, предложенные в них.
Вот моя ситуация. Я пишу приложение Java с использованием платформы обработки, и я нахожусь на завершающей стадии, когда мне нужно начать думать об упаковке приложения. Файл jar, исполняемый из командной строки, — это то, что я пытаюсь создать с помощью функции экспорта в Eclipse.
Структура моего проекта выглядит так:
src/
multiple packages/
libs/
jar files and natives
data/
fonts and images
config/
json files
Когда я экспортирую файл jar и разархивирую его, чтобы проверить его содержимое, я обнаруживаю, что содержимое этих каталогов было сброшено на верхний уровень.jar.
Это выглядит так:
.jar
packages
jar files
fonts
json files
Итак, когда я пытаюсь загрузить файл конфигурации с чем-то вроде:
BufferedReader reader = new BufferedReader( new FileReader( path ) );
Все работает только в файле, когда я запускаю приложение в Eclipse. Но файл jar выдает FileNotFoundException
.
Многие из вопросов, которые я видел на S.O. относительно подобных проблем рекомендуется использовать использование class.getClass().getResource()
или class.getResourceAsStream()
. Я пробовал оба из них, используя относительные пути и просто имя файла, как в:
class.getResource( 'config.json' );
class.getResources( 'cfg/config.json' );
class.getResourceAsStream( '../../config.json' );
Все эти методы возвращают значение null при запуске из Eclipse или jar с использованием:
java -jar myjarfile.jar
Я также готов использовать файл Ant. На самом деле, теперь я использую файл Ant, сгенерированный функцией экспорта, для создания jar-файла. Если есть что-то, что я могу добавить к этому, чтобы добавить каталоги в банку, это тоже было бы здорово.