Проблема загрузки ресурсов во время работы в Eclipse - PullRequest
4 голосов
/ 30 марта 2011

Я работаю над проектом Swing, используя maven2 (из командной строки) и eclipse (без интеграции с maven).Итак, я генерирую проект eclipse с помощью maven eclipse plugin (mvn eclipse:eclipse), импортирую его в eclipse и выполняю всю свою работу.

Моя проблема: когда я запускаю свое приложение вЗатмение (как Java-приложение), я не могу найти ни один из ресурсов, которые находятся в моем каталоге src.В поисках информации о моей проблеме я получаю ответ на другой вопрос .Итак, я сравнил вывод следующих инструкций:

MyClass.class.getResource("/").getPath();
MyClass.class.getProtectionDomain().getCodeSource().getLocation().toString();

Они дали мне следующие выходные данные соответственно:

$ {workspace_loc} / $ {my_project} / target /test-classes / file: / $ {workspace_loc} / $ {my_project} / target / classes /

Проверяя вышеуказанные местоположения, я мог видеть, что первое пусто, а другое содержит всемои скомпилированные классы и ресурсы.Итак, я пришел к выводу, что загрузчик классов ищет мои ресурсы не в том месте.Итак, я думаю, у меня есть три вопроса:

  1. Правильно ли мое понимание?
  2. Если да, то как найти классы, которые он загружает?
  3. Какрешить эту проблему?

ОБНОВЛЕНИЕ: я изменил свой код, поэтому вместо вызова MyClass.class.getResource(...) или MyClass.class.getResourceAsStream(...) я теперь использую ClassLoader.getSystemResource(...) и ClassLoader.getSystemResourceAsStream(...).Таким образом, в затмении все работает нормально.Я просто не знаю точно, почему.Любой намек на это?

Ответы [ 7 ]

9 голосов
/ 04 апреля 2011

Два возможных случая для меня:

  • Вы используете eclipse для компиляции вашего проекта. Затем eclipse настроен на исключение (или не включение) ресурсов в папку src. Вы можете установить его в Project / Properties / Java Build Path / Source. Затем вы тратите свою папку src и убедитесь, что у вас есть что-то вроде «Включено все», «Исключено нет».

  • Вы запускаете приложение maven, используя maven для компиляции, а не затмения, даже если вы используете eclipse в качестве IDE. Тогда по умолчанию maven не будет копировать ресурсы из исходной папки в выходную папку ... Потому что это не стандартный способ работы maven. Таким образом, ресурс отсутствует в пути к классам, и вы не можете найти его. Просто измените свою конфигурацию maven, чтобы она также включала ресурсы из вашей исходной папки.

4 голосов
/ 30 марта 2011

Я думаю, вам нужно добавить src/main/resources к пути сборки.Это сделано в Project Properties > Build Path > Source.Вот как выглядит стандартный проект maven:

enter image description here

В будущем при использовании Eclipse я предлагаю использовать плагин m2eclipse и создавать проект с его использованием.Это автоматически гарантирует, что все эти папки находятся в пути сборки.

2 голосов
/ 05 апреля 2011

Попробуйте: Запустите настройки ... -> Путь к классам -> Записи пользователя -> Дополнительно ... -> Добавить папки

1 голос
/ 31 марта 2011

Можете ли вы попробовать загрузить ресурсы используя ниже

this.getClass().getClassLoader().getResourceAsStream(propertyFileName)
0 голосов
/ 30 ноября 2017

Для меня файлы в WEB-INF не были включены.Поэтому я добавил их в Buildpath (Проект -> Путь сборки -> Настроить путь сборки -> Добавить папку (project / src / main / webapp). Это решило проблему.

0 голосов
/ 05 апреля 2011

То, что я хотел бы предложить, это прекратить использование eclipse: eclipse (извините, я знаю, что это резко). Я использовал его около 8 месяцев, не могу поверить, что это заняло у меня так много времени, и использовал M2Eclipse. M2Eclipse - это плагин Eclipse, в котором вы делаете следующее.

  1. Включить управление зависимостями.
  2. Обновить конфигурацию проекта
  3. (In Eclipse) -> Проект сборки
  4. (в Eclipse) Запустить приложение

Это может показаться не так, но это гораздо более простой и менее расстраивающий способ сделать это.

До, с затмением: затмение. Вам придется запустить его, затем нажать «Обновить» и надеяться, что все настроено - если у вас есть многомодульный pom, то все может пойти не так.

0 голосов
/ 04 апреля 2011

Это может быть полезной информацией

Плагин Eclipse Maven имеет собственный контейнер пути к классам, который при включении конфликтует с сгенерированными путями классов.

...