Проблемы с JPackage из-за разной структуры путей между Windows и Linux
В Windows я только что преобразовал установщик своего приложения из Izpack в JPackage, и из-за структуры, созданной JPackage, мне пришлось внести некоторые изменения в код, чтобы мое приложение могло найти различные файлы конфигурации, в основном они копируются из папки приложения в C:\Users\Username\Appdata.... при первом запуске (но немного сложнее).
Сейчас я использую JPackage в Linux, и приложение копирует файлы конфигурации из приложения в $HOME/.appname. Однако, в то время как приложение Windows является подпапкой относительно средства запуска с Linux, теперь оно находится в ../lib/app, поэтому код не работает
Поэтому мне нужно внести некоторые изменения, специфичные для Linux, но это заставило меня задуматься, что я делаю здесь что-то очень не так, чтобы мне пришлось внести эти изменения?
1 ответ
Один из способов загрузки файлов конфигурации - использование загрузчика классов: файлы упаковываются в jar вместе с остальной частью вашего приложения, и вы загружаете их как поток, а не как файл:
Properties properties = new Properties();
InputStream stream = YourApplication.class.getResourceAsStream("/resources/conf.properties");
properties.load(stream);
Путь (пример) /resources/conf.properties
относится к файлу.jar, в который он входит, поэтому не зависит от папки установки.
В приведенном выше примере предполагается, что вы используете файл свойств, но это работает для любого ресурса, который вы можете загрузить как поток.