我有一个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?假设只有一个jar与此文件名模式匹配。
答案 0 :(得分:1)
引号(*
)内没有glob(?
,"…"
或类似名称)。您必须取消报价与零件的报价。但是,"… -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=(…)
的shell中起作用。如果您需要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"