Каков контекст class.getRessource () (Java)? - PullRequest
1 голос
/ 19 июля 2011

Я настраиваю среду разработки, и меня беспокоит немного кода:

public static URI getResource(Class<?> cl, String resource) {
    URL url = cl.getResource(resource);
    //etc...
}

Проблема в том, что url пуст. Рассматриваемый ресурс - это файл, расположенный в том же каталоге, что и файл Java. И это должно вернуть ненулевой URL.

Эта среда была успешно установлена ​​многими людьми, но она не работает на моей машине.

Дополнительная информация:

  • getRessource () должен использовать classLoader из cl. (Этот classLoader) .toString () дает: "sun.misc.Launcher$AppClassLoader@11b86e7"
  • Этот код находится в тесте jUnit, который я запускаю через eclipse Indigo в Windows 7 (проблема с другим контекстом файла в linux / windows?)

Ответы [ 4 ]

3 голосов
/ 19 июля 2011

Загрузчик классов ожидает получить файл ресурсов из того же каталога, что и файл .class, а не из файла .java.В зависимости от того, как настроен ваш проект Eclipse, это могут быть разные каталоги.

Обычно процесс сборки копирует файл ресурсов в выходной каталог при создании файлов .class, но в этом случае, возможно, онне было?

1 голос
/ 19 июля 2011

Вызов cl.getResource(resource) пытается найти ресурс, соответствующий строке resource на пути к классам загрузчика классов для cl.

Это означает, что resource должен быть относительным путемв classpath вашего приложения.

Тот факт, что вызов метода возвращает null, означает, что загрузчик классов не может найти запрошенный ресурс.Вы должны проверить, что ресурс копируется в нужное место (Eclipse или компоновщик) перед запуском модульного теста.

(проблема в другом файловом контексте в linux / windows?)

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

Есть ли в этом проекте файл build.xml?Попробуйте запустить тесты из командной строки, используя Ant.

Есть ли в этом проекте файлы pom.xml?Попробуйте запустить тесты из командной строки, используя mvn test.

0 голосов
/ 19 июля 2011

Class.getResource(String) будет искать ресурс в той же папке пакета, что и .class.ClassLoader.getResource(String) будет искать ресурс внутри папки src.new File(String) будет искать ресурс вне папки src.

0 голосов
/ 19 июля 2011

Какой класс проходит? Если это класс J2SE, загрузчик класса будет загрузчиком классов начальной загрузки и не будет определять местоположение ресурсов приложения.

...