Подстановочный знак в опциях JVM - PullRequest
0 голосов
/ 28 мая 2019

У меня есть jar, который загружается в сборку через Maven, и, следовательно, версия включена в имя jar, например:

newrelic-agent-5.0.0.jar

При экспорте параметров JVM для запуска jar необходимо включить этот файл, однако это вызвало проблему, если мы хотим, чтобы параметры JVM не зависели от номера версии, ипринять любую версию в сборке.

Если параметры JVM следующие:

export JVM_OPTS = "... -javaagent: / path / to / lib / newrelic-agent.? .jar "

Чем можно заменить ? таким образом, чтобы опции JVM находили рассматриваемый jar-файл без указания версии зависимости?Предполагая, что будет только одна банка, которая будет соответствовать этому шаблону имени файла.

1 Ответ

1 голос
/ 28 мая 2019

Никакой глобус (*, ? или что-то в этом роде) не работает внутри кавычек ("…"). Вы должны расстаться с партией. Однако "… -javaagent:/path/to/lib/newrelic-agent-"*".jar" не будет работать, поскольку glob попытается найти файл, начинающийся с … -javaagent:.

Следовательно, поместите jar в отдельную переменную и используйте эту переменную. Поскольку не может быть или несколько версий библиотеки, вы можете использовать проверку и предупредить пользователя

#! /bin/bash
lib=("/path/to/lib/newrelic-agent-"*.jar)
if [ "${#lib[@]}" != 1 ]; then
    echo "Found no or multiple versions of lib newrelic agent"
    exit 1
fi
export JVM_OPTS="... -javaagent:$lib"

Это работает только в bash -подобных оболочках, которые поддерживают массивы array=(…). Если вам нужна версия posix, используйте

#! /bin/sh
exactlyOne() {
  if [ "$#" != 1 ]; then
      echo "Found no or multiple matches"
      exit 1
  fi
  echo "$1"
}
lib=$(exactlyOne "/path/to/lib/newrelic-agent-"*.jar)
export JVM_OPTS="... -javaagent:$lib"
...