Затмение:экспортируйте в .jar И включайте файлы ресурсов (ANT)
-
20-09-2019 - |
Вопрос
Наш проект в 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);