kyberorg
@kyberorg

Ссылка на файл вне JAR'a?

Моя ситуация:

Есть ПО, которое планируется поставлять одним JAR файлом. Есть log4j, которому надо файлик log4j.properties


Планируется, что такой файлик будет находиться где-то вне JAR'a (где-нибудь в ФС сервера, где ПО запускают).


Вопрос:


Каким способом реализовать ссылку на внешний ресурс в коде приложения?


UPD:

Я пока нашел способ передать его через свойство при запуске приложения.

Но реально не хочется плодить кучу параметров запуская этот JAR.


Есть ли другой более элегантный способ передачи внешнего ресурса в JAR?
  • Вопрос задан
  • 3791 просмотр
Пригласить эксперта
Ответы на вопрос 6
barker
@barker
Не очень понятна проблема, но если я правильно понял, то просто положите log4j.properties в любой путь содержащийся в CLASSPATH.
Ответ написан
@tsegorah
Не придумывается ничего кроме как аргументов при запуске(если отдельное приложение), или положить внутрь jar файл с настройкой, например в файл свойств.
А сервером вы называете просто саму машину, или сервер приложений? В последнем случае вы могли бы задать JNDI имя на сервере со строковым содержанием и им пользоваться.
Ответ написан
kyberorg
@kyberorg Автор вопроса
tsegorah, сервером — я называю физическую машину на которой запускается JVM.

Если рассматривать вариант: положить внутрь jar файл с настройкой. То как тогда быть с модификацией этих настроек при развертывании приложения на сервере (не распаковывать же jar).

Сейчас реализовано через свойства и запускается так: java -jar -Dlog.config=/path/to/log/log4j.properties application.jar
Что не является по сути элегантным решением.
Ответ написан
Если это отдельное приложение, то почему бы не размещать все настройки приложения (в том числе и log4j.properties) в стандартных (т.е. предопределённых) местах? Типа директории /etc/yourapp и/или /home/.config/yourapp. Посмотрите спецификацию XDG ну или хотя бы системные свойства Java.

Ну а если приложение запускается внутри сервера приложений, то там есть свои собственные возможности. Про JNDI уже упоминали.
Ответ написан
kyberorg
@kyberorg Автор вопроса
lorus: тоже выход. Но тут есть вопрос кросс-платформенности.
В винде вообще нет места похожего на /etc
В freebsd настройки надо хранить в /usr/local/etc

А фишка явы как раз в кросс-платформенности
Ответ написан
Colwin
@Colwin
Ведущий Java-разработчик
Хоть я и категорически против такой практики, многие приложения в последнее время стали упорно создавать свои личные каталоги в пользовательском каталоге. Возможно, Вам тоже этот вариант подойдет.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы