Предположим, приложение, разработанное в 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
из командной строки, не производят не- null
InputStream
.
Есть ли способ настроить IntelliJ
каким-то образом «знать», что все пакеты принадлежат одному и тому же JAR
и, таким образом, относиться к ним соответствующим образом, так что выше вызов getResourceAsStream()
работ?
Это не распространяется на модули, которые уже зависят от других модулей, что приводит к круговым зависимостям. В противном случае ответ правильный. Спасибо и +1. – PNS
Структура проекта IntelliJ поддерживает круговые зависимости, поэтому это не проблема сама по себе. – yole