gpt4 book ai didi

java - JVM 选项中的通配符

转载 作者:行者123 更新时间:2023-12-02 09:50:34 26 4
gpt4 key购买 nike

我有一个通过 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 "$1"
}
lib=$(exactlyOne "/path/to/lib/newrelic-agent-"*.jar)
export JVM_OPTS="... -javaagent:$lib"

关于java - JVM 选项中的通配符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56345186/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com