Как получить доступ к ресурсам в скомпилированном банке?

Во-первых, я прочитал много С.О. вопросы по этой теме, и я пробовал вещи, предложенные в них.

Вот моя ситуация. Я пишу приложение 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-файла. Если есть что-то, что я могу добавить к этому, чтобы добавить каталоги в банку, это тоже было бы здорово.

8
задан Andrew Thompson 16 July 2012 в 00:55
поделиться