Eclipse: экспорт в .jar и файлы ресурсов включения (ANT) - PullRequest
7 голосов
/ 15 января 2010

Наш проект в 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 /> Build Path> Use as Source Folder.

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

РЕДАКТИРОВАТЬ : почему затмение не может справиться с этим правильно? Почему возникают проблемы с «вложенными» выходными папками? В закладке Source диалога Build Path я мог бы легко добавить папку rsc / с выходной папкой, установленной в bin / rsc /, но, похоже, она не может помещать вложенные папки ...


РЕДАКТИРОВАТЬ 2 : Теперь я смог создать xml-файл для сборки содержимого с помощью ant, и каким-то образом мне удалось включить папку rsc прямо в jar. Все еще не работает из-за тех же ошибок. Мне действительно нужно проверять пути к ресурсам, находятся ли они в 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 строк.


Кто-нибудь знает, как это сделать? спасибо и привет

Ответы [ 5 ]

15 голосов
/ 22 января 2010

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

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

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

4 голосов
/ 16 января 2010

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

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

2 голосов
/ 15 января 2010

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

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

1 голос
/ 20 января 2010

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

String path = "rsc/img/img.gif";
URL url = this.getClass().getResource(path);
ImageIcon icon = new ImageIcon(url);
1 голос
/ 18 января 2010

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

...