Загрузка файла из jar зависимостей внутри maven junit

Я использую maven 2.1.0 и имею проект с несколькими модулями. Примеры модулей:

  • spr-ресурсы
  • spr-общий

spr-common зависит от spr-ресурсов

spr-resources содержит только файлы, без классов.

У spr-common есть junit, в который нужно загрузить файл из jar-файла spr-resources.

Я использовал:

String fileName = getClass().getResource("/jaskeyfile.3DES").getFile();
is = getClass().getClassLoader().getResourceAsStream(fileName);
is.read(data);

И это работает, когда я запускаю тест в IntelliJ, но когда я делаю тест mvn, он терпит неудачу с NullPointerException, когда я пытаюсь выполнить для него read().

Почему это происходит? Он должен нормально читать файл из зависимости.

Также pom.xml в spr-common имеет зависимость от spr-resources (пробовал как с проверкой области, так и без нее)

РЕДАКТИРОВАТЬ: я тоже пробовал

getClass().getClassLoader().getResourceAsStream("/jaskeyfile.3DES");

без везения.

EDIT2: данный файл существует в полученном банке, поэтому я думаю, что он должен быть доступен.


person Krzysztof Krasoń    schedule 07.12.2010    source источник
comment
Ммм, это странно. Пробовали ли вы более простой способ: InputStream is = getClass().getResourceAsStream("/java/pkg/with/your/file/filename.txt");? Действительно ли зависимость spr-resources определена в файле pom.xml, а не только в вашей среде IDE? Возвращаемый поток — null, если ресурс не был найден в CLASSPATH. Изменить: действительно ли файл находится в каталоге spr-resources в каталоге src/main/resources/java/pkg/with/your/file/filename.txt?   -  person Jiri Patera    schedule 07.12.2010
comment
Если вы запускаете mvn test, тест запускается локально на этом конкретном модуле. Если вам нужен другой модуль spr-resource, вы должны определить его как тестовую зависимость, иначе вы не увидите его в своих тестовых примерах.   -  person khmarbaise    schedule 07.12.2010
comment
Я думаю, что вы видите всю компиляцию плюс тестовые зависимости. Поэтому нет необходимости определять его как тестовую зависимость.   -  person Jiri Patera    schedule 07.12.2010
comment
Старый вопрос, но вы никогда не давали отзыв по этому поводу!? :/   -  person bugske    schedule 11.04.2013


Ответы (2)


Внимательно проверьте все

Вот список для работы:

  1. Файл jaskeyfile.3DES находится в src/main/resources в модуле spr-resources.
  2. Ваш локальный репозиторий содержит последнюю версию spr-resources-x.y.z-SNAPSHOT.jar (или вы выпустили ее/версию напрямую), и вы определенно использовали для нее mvn clean install
  3. Модуль spr-common ссылается на правильную (именованную) версию spr-resources-x.y.z.jar (область компиляции будет видна как в тестовых, так и в компилируемых путях к классам)

Если все вышеперечисленное верно, то ваш вызов getClass().getResourceAsStream("/jaskeyfile.3DES") должен работать. Я постоянно использую эту структуру в своих проектах, так что вы не просите здесь луну или что-то еще.

person Gary Rowe    schedule 08.12.2010

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

  • getClass().getResourceAsStream("/jaskeyfile.3DES")
  • getClass().getClassLoader().getResourceAsStream("jaskeyfile.3DES")

Class.getResourceAsStream() принимает путь относительно каталога пакета класса, поэтому он принимает косую черту в начале.

ClassLoader.getResourceAsStream() уже использует абсолютный путь, поэтому он не принимает косую черту.

person trask    schedule 07.12.2010
comment
Пробовал и загрузчик классов, и получаю класс getResourceAsStream, как со слэшем, так и без него - person Krzysztof Krasoń; 08.12.2010