Доступ к ресурсам JAR - PullRequest
9 голосов
/ 14 апреля 2010

У меня есть jar файл с ресурсами (в основном, конфигурацией для кэшей, ведением журнала и т. Д.), Который я хочу распространить.

У меня проблема с относительными путями для этих ресурсов, поэтому я сделал то, что нашел в другом вопросе stackoverflow, который сказал, что это был правильный путь:

ClassInTheSamePackageOfTheResource.class.getResourceAsStream('resource.xml');

К сожалению, это не работает.

Есть идеи? Спасибо!

PS: Очевидно, я не могу использовать абсолют пути, и я хотел бы избежать переменные среды, если это возможно

Ответы [ 4 ]

11 голосов
/ 14 апреля 2010

Убедитесь, что ваша папка ресурса указана как папка источника в настройках вашего проекта. Кроме того, убедитесь, что папка ресурса настроена на экспорт при сборке jar.

Вы можете добавить расширение .zip к файлу JAR, а затем открыть его, чтобы убедиться, что ваши ресурсы включены и в ожидаемом месте.

Я всегда использую абсолютные пути, как это:

InputStream input = this.getClass().getResourceAsStream("/image.gif");

Когда вы используете абсолютные пути, "/" - это корневая папка в файле jar, а не корневая папка хост-машины.

1 голос
/ 14 апреля 2010

где ресурс.xml найден? Если в корне дерева исходного кода, попробуйте префикс его с /.

1 голос
/ 14 апреля 2010

Я обычно храню файлы и другие ресурсы, а затем извлекаю их как URL:

URL url = MyClass.class.getResource("/design/someResource.png");

В статическом контексте или иным образом:

URL url = getClass().getResource("/design/someResource.png");

Из экземпляра.

Приведенные выше фрагменты предполагают, что дизайн - это папка верхнего уровня в банке.В общем, если путь начинается с "/", он предполагает абсолютный путь, в противном случае он является относительным от местоположения класса.

1 голос
/ 14 апреля 2010

Мне всегда приходится ломать голову над getResourceAsStream, чтобы сделать эту работу. Если «resource.xml» находится в org/pablo/opus, я думаю , что вы хотите:

Name.class.getResourceAsStream("org.pablo.opus.resource.xml");
...