Я мигрирую приложение из Oracle Java 8 в openJDK11 + openJFX11.В версии Java 8 я загрузил файл свойств, используя следующий код (CryoStats - класс, содержащий код):
try {
jarLocation = CryoStats.class.getProtectionDomain().getCodeSource().getLocation().toURI().getPath();
confLocation = jarLocation.substring(0, jarLocation.lastIndexOf("/")) + "/config/";
try (FileInputStream input = new FileInputStream(confLocation + "CryoStats.properties");) {
properties.load(input);
HORUS_HOST = properties.getProperty("HORUS_HOST");
HORUS_USERNAME = properties.getProperty("HORUS_USERNAME");
HORUS_PASSWORD = properties.getProperty("HORUS_PASSWORD");
CONNECTION_TIMEOUT = Integer.parseInt(properties.getProperty("CONNECTION_TIMEOUT"));
SOCKET_TIMEOUT = Integer.parseInt(properties.getProperty("SOCKET_TIMEOUT"));
System.out.println("CryoStats.properties loaded.");
} catch (FileNotFoundException ex) {
System.out.println("Error loading properties file");
System.out.println(ex.getMessage());
} catch (IOException ex) {
System.out.println("Error loading properties file");
System.out.println(ex.getMessage());
}
} catch (URISyntaxException ex) {
System.out.println(ex.getMessage());
}
В моей конфигурации сборки Netbeans у меня была задача, которая скопировала «config»папка в папку "dist", в которую входят: мой jar-файл, папка "lib", папка "config".Этот код работал как внутри Netbeans, так и во время выполнения.
Мне нужно дать пользователю возможность редактировать файл свойств, поэтому мне нужно сохранить его вне jar.
Теперь я перенес код в проект Eclipse, и яскомпилировать против openJDK11 и openJFX11.Если я запускаю проект в Eclipse, он загружает файл свойств.Однако, если я создаю образ моего модуля во время выполнения с помощью jlink, он не может найти файл свойств, и значение jarLocation:
jarLocation = /cryostats
Насколько я знаю, это происходит потому, чтов полностью модульном Java-приложении отсутствует концепция пути к классам, поэтому в качестве обходного пути я использовал
confLocation = System.getProperty("user.dir") + "/config/";
и вручную скопировал папку config в папку binпосле выполнения jlink.Это работает, когда я запускаю приложение, но оно не работает из Eclipse, и это грубое и уродливое решение.
Есть ли способ сохранить доступ к файлу свойств пользователем в образе времени выполнения?генерируется jlink и в то же время доступен Eclipse?