Использование Java 11 и Gradle.
Наличие модулей - база данных и пользовательский интерфейс.
Имеет следующую структуру:
.
├── build.gradle
├── database
│ ├── build.gradle
│ └── src
│ ├── main
│ │ ├── java
│ │ │ └── com
│ │ │ └── company
│ │ │ └── services
│ │ │ └── LoadData.java
│ │ └── resources
│ └── test
│ └── resources
│ └── dbinit
│ └── data.sql
└── ui
├── build.gradle
└── src
├── main
│ ├── java
│ └── resources
└── test
├── java
│ └── com
│ └── company
│ └── ui
│ └── tests
│ └── BaseUI.java
└── resources
Я бы хотел выполнить в классе BaseUI из модуля пользовательского интерфейса метод класса LoadData из модуля базы данных.
Этот метод должен получить файл из ресурсов базы данных и произвести некоторые манипуляции.
Но при его выполнении я получаю исключение нулевого указателя.
public class BaseUI {
@Test
public void getData(){
LoadData loadData = new LoadData();
loadData.insertData("dbinit/data.sql");
}
}
public class LoadData {
public void insertData(String fileName){
BufferedReader reader = new BufferedReader(new InputStreamReader(
LoadData.class.getClassLoader().getResourceAsStream(fileName)));
}
}
Насколько я понимаю, он ищет файл внутри модуля ui, а не внутри модуля базы данных.
Если я перенесу метод getData в класс LoadData - все работает.
В Java 9 можно было сделать следующее, но в Java 11 устарело:
Optional<Module> otherModule = ModuleLayer.boot().findModule("database");
otherModule.getResourceAsStream("dbinit/data.sql");