2016-02-17 4 views
1

Предположим, приложение, разработанное в IntelliJ, которые должны быть упакованы в один JAR и использовать «ресурс» файлы, которыеЗагрузка файла ресурсов из баночки, вне пути к классам, в IntelliJ

  • Может быть расположен в любой упаковке (не только в папке resources)
  • может иметь нестандартные расширения файлов (может быть даже Java-файлы)
  • ли не во всех (например, к классам, чтобы избежать циклических зависимостей)

Если класс (скажем, MyClass) в пакете (скажем, com.example.pack) получает путь к такому «ресурс», который находится за пределами его пути к классам и пытается получить к нему доступ через

MyClass.class.getClassloader().getResourceAsStream(resourcePath); 

InputStream объект возвращается в IntelliJ модульные тесты (предположительно) null из-за пути к классам. Однако, когда код выполняется, он работает, поскольку все находится в одном JAR.

Например, связывая все пакеты приложения в том же JAR (скажем, MyApplication.jar) и работает что-то вроде

java -cp MyApplication.jar com.example.pack.MyClass 

из командной строки, не производят не- nullInputStream.

Есть ли способ настроить IntelliJ каким-то образом «знать», что все пакеты принадлежат одному и тому же JAR и, таким образом, относиться к ним соответствующим образом, так что выше вызов getResourceAsStream() работ?

ответ

1

Единственный способ настроить это - добавить модуль, содержащий файлы ресурсов, в зависимость от модуля, содержащего тесты. Затем IntelliJ IDEA будет включать этот модуль в путь класса выполнения тестов, а вызов getResourceAsStream() будет работать.

+0

Это не распространяется на модули, которые уже зависят от других модулей, что приводит к круговым зависимостям. В противном случае ответ правильный. Спасибо и +1. – PNS

+0

Структура проекта IntelliJ поддерживает круговые зависимости, поэтому это не проблема сама по себе. – yole

Смежные вопросы