Настройка глобальных параметров Java в Bash

#java #linux #bash

#java #linux #bash

Вопрос:

Я хочу перейти -Dtangosol.coherence.wka=localhost к параметрам JAVA.

Когда я пытался java -Dtangosol.coherence.wka=localhost -jar myapp.jar , это работало. Флаг успешно передан в приложение.

Но я хочу использовать скрипт bash для установки флага в глобальную переменную JAVA, поэтому мне не нужно передавать флаг при каждом запуске приложения.

Я пытался:

export JAVA_OPTS="-Dtangosol.coherence.wka=localhost" Но, похоже, это не работает. Я что-то пропустил?

Комментарии:

1. …тем не менее, JAVA_OPTS обычно выполняется сценариями оболочки, запускающими Java , а не самой JVM. Если вы еще не написали такой сценарий, вам не на что обращать на него внимание, так что нельзя ожидать, что он возымеет какой-либо эффект.

2. @CharlesDuffy Спасибо, я перепутал опции JVM и JAVA. На самом деле, параметр I, который я передавал, является параметром JVM. Есть ли способ настроить его через bash?

3. (Кроме того, это откровенно плохая практика; я не уверен, какой крупный проект OSS — может быть, Tomcat? — виноват в начале JAVA_OPTS тренда, но способ его использования означает, что таким образом может быть передано только очень ограниченное подмножество значений по причинам, описанным в BashFAQ # 50 … если только он не вызывается с eval помощью , что создает новый / другой / дополнительный набор ошибок, некоторые из которых влияют на безопасность).

4. Честно говоря, проще всего здесь просто создать собственную оболочку для вашего приложения. В качестве функции оболочки myapp() { java -Dtangosol.coherence.wka=localhost -jar myapp.jar "$@"; } будет создана myapp команда, которая добавляет это значение в командную строку, а также передает все аргументы, предоставленные функции, в базовую команду. В качестве имени исполняемого файла myapp вам потребуется всего две строки — #!/bin/sh и затем java -Dtangosol.coherence.wka=localhost -jar myapp.jar "$@" — чтобы сделать то же самое.

5. Это Helidon (проект микросервиса), запущенный в Docker. Первоначальная проблема заключается в том, что мне нужно передавать разные параметры JVM для разных сред (разработка, контроль качества и т. Д.). Файл docker не поддерживает условный оператор. Итак, я должен выполнить скрипт bash в DockerFile, чтобы определить правильную среду.. В сценарии bash я стремлюсь настроить некоторые глобальные параметры jvm в зависимости от среды.. @CharlesDuffy