【问题标题】:How to resolve environment variables in runtime in javajava如何在运行时解析环境变量
【发布时间】:2025-12-29 12:30:06
【问题描述】:

我的 java 应用程序需要在运行时解析文件路径中的环境变量,文件路径将在属性文件中指定如下 如果是 Windows,它将是 %JAVA_HOME%\certs\myselffign.cer 如果是 unix,它将是 $JAVA_HOME\certs\myselffign.cer

我的 java 应用程序需要将这些文件路径解析为绝对路径并将证书加载到信任库中。

有什么办法吗。 截至目前,我正在检查 os.name ,如果 os.name 是 windows 则模式匹配 %% 并使用 system.getenv ,以防非 windows 寻找 $。

我希望有更好的方法来做到这一点

【问题讨论】:

  • System.getEnv() 你是怎么做的。你有什么问题?

标签: java environment-variables


【解决方案1】:

您可以在属性文件中使用标准 (Java) 模板语法 ${java.home},然后在运行时将其替换为 System.getProperty("java.home"); 的值。所以在你的文件中而不是:

certificate=%JAVA_HOME%\certs\myselffign.cer (Windows)
certificate=$JAVA_HOME\certs\myselffign.cer (*nix)

只需使用标准:

certificate=${java.home}/certs/myselfsign.cer

并在代码中执行以下操作:

String javaHomePath = System.getProperty("java.home")l
Properties props = Properties.load( ...);
String certFilePath = props.get("certificate");
certFilePath = certFilePath.replaceAll("${java.home}", javaHomePath);

请注意,使用标准模板语法还允许您使用一些开源属性替换工具。像 Spring PropertyResolver。希望对您有所帮助。

【讨论】: