Как правильно упаковать ресурсы в Jar - PullRequest
18 голосов
/ 01 сентября 2011

Я знаю, что есть другие вопросы, нацеленные на ту же проблему, но дело в том, что решения не работают для меня.У меня есть небольшой инструмент, который должен читать файлы, которые я хочу иметь, упаковывать как ресурсы и опираться на другие проекты (я использую Eclipse Helios), которые я хотел бы иметь в виде jars вместо отдельных классов.

Как приложение в Eclipse я могу получить доступ к своим ресурсам через

String path = MyClass.class.getClassLoader().getResource("resources/" + name + ".SOURCE").getPath();
System.out.println(path);
File file = new File(MyClass.class.getClassLoader().getResource("resources/" + name + ".SOURCE").toURI());
defaultSource = readSOURCEFile(file);

тогда и только тогда, когда я помещаю папку ресурсов в путь вывода (скомпилированные источники), а НЕ если я помещаю ее в свою папку src.

Когда я упаковываю проект, ресурсы в корневой папке или в папке классов не упаковываются вообще.Если у меня есть ресурсы в моей папке src, они упакованы в src / resources.

Я использую Export - Runnable Jar, что я делаю неправильно?Если я попытаюсь использовать Export - Jar, я смогу правильно упаковать свои источники и ресурсы, но у меня возникнут проблемы с настройкой основного класса, и я не смогу выполнить jar.Манифест правильный, и класс существует: - (.

Вторая проблема: в упакованном банке я получаю сообщение об ошибке: URI не является иерархическим (после того, как я вручную переместил ресурсы в банке, я мог выполнить банку)

Заранее спасибо!

Я связал источники в рабочую область, это проблема?

1 Ответ

17 голосов
/ 01 сентября 2011

Отметьте папку resource в корневой папке вашего проекта как «Исходную папку» в Eclipse (щелкните правой кнопкой мыши по папке, перейдите в «Путь сборки»> «Использовать как исходную папку»). Затем прочитайте ресурсы, как это:

InputStream is = MyClass.class.getClassLoader().getResourceAsStream(name + ".SOURCE");
BufferedReader reader = new BufferedReader(new InputStreamReader(is));
String line = reader.readLine();
...