JVM 选项中的通配符
Wildcard in JVM options
我有一个通过 Maven 拉入构建的 jar,因此版本包含在 jar 的名称中,例如:
newrelic-agent-5.0.0.jar
导出 JVM 选项时,为了 运行 需要包含该文件的 jar,但是如果我们希望 JVM 选项与版本号无关,并且接受构建中的任何版本。
如果JVM选项如下:
export JVM_OPTS="... -javaagent:/path/to/lib/newrelic-agent. ? .jar"
可以用什么替换 ?
以便 JVM 选项在不指定依赖项版本的情况下找到有问题的 jar?假设永远只有一个 jar 匹配这个文件名模式。
没有 glob(*
、?
或类似的东西)在引号 ("…"
) 内起作用。您必须取消引用带有 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"
这仅适用于支持数组 array=(…)
的类似于 bash
的 shell。如果您需要 posix 版本,请使用
#! /bin/sh
exactlyOne() {
if [ "$#" != 1 ]; then
echo "Found no or multiple matches"
exit 1
fi
echo ""
}
lib=$(exactlyOne "/path/to/lib/newrelic-agent-"*.jar)
export JVM_OPTS="... -javaagent:$lib"
我有一个通过 Maven 拉入构建的 jar,因此版本包含在 jar 的名称中,例如:
newrelic-agent-5.0.0.jar
导出 JVM 选项时,为了 运行 需要包含该文件的 jar,但是如果我们希望 JVM 选项与版本号无关,并且接受构建中的任何版本。
如果JVM选项如下:
export JVM_OPTS="... -javaagent:/path/to/lib/newrelic-agent. ? .jar"
可以用什么替换 ?
以便 JVM 选项在不指定依赖项版本的情况下找到有问题的 jar?假设永远只有一个 jar 匹配这个文件名模式。
没有 glob(*
、?
或类似的东西)在引号 ("…"
) 内起作用。您必须取消引用带有 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"
这仅适用于支持数组 array=(…)
的类似于 bash
的 shell。如果您需要 posix 版本,请使用
#! /bin/sh
exactlyOne() {
if [ "$#" != 1 ]; then
echo "Found no or multiple matches"
exit 1
fi
echo ""
}
lib=$(exactlyOne "/path/to/lib/newrelic-agent-"*.jar)
export JVM_OPTS="... -javaagent:$lib"