Затмение:экспортируйте в .jar И включайте файлы ресурсов (ANT)

StackOverflow https://stackoverflow.com/questions/2073250

Вопрос

Наш проект в eclipse приблизительно показывает следующие папки:

application
    - src
    - JRE System Library [1.6]
    - Referenced Libraries
    - lib
    - rsc

В нашем проекте мы хотели бы использовать Файл > Экспорт...> Исполняемый файл JAR

Что ж, это работает нормально, за некоторым исключением:Если мы хотим запустить наш application.jar, нам все равно нужно скопировать папку rsc/ в то же место, что и application.jar.

В rsc / у нас есть другие папки для разделения различных частей.По сути, мы загружаем фрагменты, используя код (ну, немного измененный, но стиль пути правильный).

strUrl = "file:rsc/properties/Constants.properties";
url = new URL(strUrl);
ImageIcon icon = new ImageIcon(url);

Я мог бы щелкнуть правой кнопкой мыши на rsc/ > Путь к сборке> Использовать в качестве исходной папки.

Но это также не работает, потому что eclipse автоматически не копирует папку rsc в bin/-folder.И тогда мы больше не сможем запускать его с терминала (не упакованного в jar)

Редактировать:почему eclipse не может справиться с этим правильно?Почему у него возникают проблемы с "вложенными" выходными папками?На вкладке Source диалогового окна Build Path я мог бы легко добавить rsc /-folder с выходной папкой, установленной в bin / rsc / , но, похоже, она не может размещать вложенные папки...


ПРАВКА 2:Теперь я смог создать xml-файл для сборки материала с помощью ant, и каким-то образом мне удалось включить rsc-папку прямо в jar.По-прежнему не запускается из-за тех же ошибок.Действительно ли мне нужно проверять пути к ресурсам, находятся ли они в JAR или нет?Содержимое БАНКИ теперь следующее:

META-INF/
META-INF/MANIFEST.MF
configurator/
controller/
editor/
gui/
logic/
networking/
rsc/
rsc/gamesettings/
rsc/levels/
rsc/pics/
rsc/properties/
util/

но Java все еще ненавидит меня и бросает java.io.FileNotFoundException: rsc/properties/Constants.properties с отслеживанием стека, состоящим примерно из 100 строк.


у кого-нибудь есть идеи, как это сделать?спасибо и с уважением

Это было полезно?

Решение

Если вы отметите rsc в качестве исходной папки Eclipse скопирует ее содержимое в выходной каталог.Или ты мог бы просто переехать rsc под src если вы хотите сгруппировать ресурсы в выходных данных.

Тогда вы можете использовать Class.getResource("/properties/Constants.properties") или Class.getResource("/rsc/properties/Constants.properties") и это будет работать независимо от того, упаковано ли ваше приложение в виде jar или запущено из исходного кода.

В качестве дополнительного примечания, file: протокол работает только с обычными файлами, для доступа к файлам внутри jar вам придется использовать что-то вроде new URL("jar:file:app.jar!/rsc/properties/Constants.properties").

Другие советы

Вы могли бы попробовать:В диалоговом окне Путь сборки Java перейдите на вкладку Библиотеки и выберите "Добавить папку класса ...".Выберите rsc из диалогового окна выбора папки класса.Содержание rsc каталог теперь будет включен в исполняемый файл jar.

(Обратите внимание, что сам rsc не будет включен, поэтому вам, возможно, придется добавить новый подкаталог в rsc, чтобы исправить структуру каталогов в jar.)

Для такого рода использования я бы рекомендовал использовать Мавен, который автоматически делает это при создании jar.Есть даже плагин Eclipse.

Вы также могли бы использовать Муравей.

Обычно я делаю это вручную, в вашем случае jar -uf foo.jar rsc это включает в себя все ваши ресурсы.Вы можете написать скрипт или сделать это в ant

Как вы говорите в Правка 2 то, что у вас есть все в одной банке, это должно сработать:

String path = "rsc/img/img.gif";
URL url = this.getClass().getResource(path);
ImageIcon icon = new ImageIcon(url);
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top