Форум на Kuban.ru (http://forums.kuban.ru/)
-   Разработка программ (http://forums.kuban.ru/f1024/)
-   -   Java-приложение, где хранить конфиги. (http://forums.kuban.ru/f1024/java-prilozhenie_gde_hranit-_konfigi-8128487.html)

Добрых дел мастер 22.12.2016 21:40

Java-приложение, где хранить конфиги.
 
Возник такой вопрос.
Допустим, я пишу настольное java-приложение.
Если я запускаю его в винде - конфиг, скорее всего, лежит примерно в той же папке, что и бинарник, а в linux - в /etc или аналогах.
Вот в случае традиционных компилируемых языков, при сборке под каждую конкретную платформу я укажу, где лежат конфиги, где бинарники, где библиотеки - и т.д. И инсталлятор будет для каждой конкретной платформы свой (строго говоря, для линукса редко используется инсталлятор, скорее - собирается пакет).
А как в случае java-приложения? Куда класть конфиги? Как сделать, чтобы инсталлятор был всеплатформенный?
Переменные окружения трогать не хочется. По крайней мере - это будет крайней мерой.
Понятно, что можно по сборке для каждой платформы, но как-то это криво.

40KHYTbIU 22.12.2016 23:49

Предлагаю не страдать и положить все в папку приложения. А то весь запал на приложение уйдет на конфигурацию, может стать камнем преткновения.

Добрых дел мастер 22.12.2016 23:59

[quote=40KHYTbIU;43457212] А то весь запал на приложение уйдет на конфигурацию, может стать камнем преткновения. [/quote]
Да, есть такая опасность.

Добрых дел мастер 23.12.2016 09:15

но вопрос все-таки о бест практисах. Не я же один столкнулся с такой проблемой. Хотя, смотря, как это реализовано в том же eclipse - похоже, все решили так же.

Zam11 23.12.2016 10:19

Есть что скрывать? Операционок(целевых) не так много, для каждой своя сборка.

Добрых дел мастер 23.12.2016 10:41

Да нет, нечего скрывать. Пытаюсь не изобрести велосипед.

Но разве не рекламировалась широко возможность запуска программ под различные платформы? А тут оказывается, можно - но криво.

Кстати, как сейчас принято хранить конфиги? Создать класс конфиг и потом серилизовать\десирилизовать его в json - это нормально, или рукожопие?

Zam11 23.12.2016 11:01

Такой вопрос лучше задать на скл.ру(надеюсь не сочтут за рекламу) в разделе java.

Добрых дел мастер 23.12.2016 12:59

кстати, а где сейчас основная тусовка java-погромистов?

wayerr 23.12.2016 13:42

хз где тусовка (может тут [url]http://javatalks.ru/[/url] ), а для хранения настроек есть [url]http://docs.oracle.com/javase/8/docs/api/java/util/prefs/Preferences.html[/url] (которые в реестра у винды и в ~/.java/.userPrefs у линукса)

такжо можно просто использовать properties, но если они для редактирования юзером, то хранить рядом с бинарником даже в win не стоит

wayerr 23.12.2016 13:46

[quote=Добрых дел мастер;43458757] Кстати, как сейчас принято хранить конфиги? Создать класс конфиг и потом серилизовать\десирилизовать его в json - это нормально, или рукожопие? [/quote]

Да не рукожопие, но обычный жисон не поддерживает коментарии (но парсер jackson можно настроить), также надо сделать так чтобы он игнорировал (или писал в лог) неизвестные поля (иначе если в новой версии ПО поле удалить то все конфиги отвалятся и юзер пойдет ставить свечку заупокой души программиста)

у хипстеров модно хранить конфиги в yaml, у интерпрайза и олдскула в properties (в java есть класс с таким именем смотри его)

Добрых дел мастер 23.12.2016 14:28

о, спасибо. Наверное, это действительно самый правильный путь.

wayerr 23.12.2016 16:13

ну яб не сказал что совсем уж правильный т.к. в linux есть [url]https://standards.freedesktop.org/basedir-spec/basedir-spec-latest.html[/url]

который предлагает хранить настройки в:

>$XDG_CONFIG_HOME defines the base directory relative to which user specific configuration files should be stored. If $XDG_CONFIG_HOME is either not set or empty, a default equal to $HOME/.config should be used.

Но емнип это можно подшаманить, а вот формат их хранения (и максимальный размер значения в байтах- MAX_VALUE_LENGTH
Maximum length of string allowed as a value (8192 characters).) весьма печален 8), но если руками не лазить в файлы и что-то жирное не хранить то подойдет

Ekibastuz 25.12.2016 20:30

В ~/..


Текущее время: 00:44. Часовой пояс GMT +3.