如何在应用程序启动脚本中用环境变量替换硬编码的 JAVA_HOME?

Posted

技术标签:

【中文标题】如何在应用程序启动脚本中用环境变量替换硬编码的 JAVA_HOME?【英文标题】:How to replace hard coded JAVA_HOME with environment variable in app startup scripts? 【发布时间】:2016-05-01 02:41:01 【问题描述】:

我需要在 Windows 8 服务器的所有应用程序的启动脚本中将硬编码的 java jre 路径 JAVA_HOME 替换为环境变量。在脚本中,代码如下: 设置 JAVA_HOME = c:\program files(x86)\java...

这些脚本是 conf 文件。我以前没有处理过这个脚本,也不想搞砸应用程序。我知道在 cmd 中我可以调用 set JAVA_HOME 来从环境变量中获取路径。有人可以建议我如何在配置(在我的情况下为 .conf)脚本中执行此操作吗?谢谢。


已编辑:让我在这里更具体一些。 Java服务是包装器,代码如下: 设置 JAVA_HOME=C:\Program Files (x86)\Java\jre1.8.0_51 wrapper.java.command=%JAVA_HOME%/bin/java

我是否应该只删除 set 行,然后 wrapper.java.command 将获取正确的 JAVA_HOME 值。如果我不需要将 JAVA_HOME 设置为与系统默认值不同的值,我不需要使用设置,这是否正确?谢谢。

【问题讨论】:

脚本正在替换 JAVA_HOME 环境变量。 【参考方案1】:

不确定你是否能够做到这一点。

环境变量特定于命令 shell 解释器,这就是 *nix shell 可以使用不同语法的原因。

如果应用程序正在读取 conf 文件,然后应用路径(即要使用的 java 路径),那么它必须准备好处理该问题,而不是仅仅接受路径作为完全限定的路径。

最好的办法可能是拥有一个包含 %JAVA_HOME%(和任何其他环境变量)的基本 conf 文件,然后生成具有实际完全限定路径的运行时 conf 文件。不确定哪种 Windows 工具最好,如果你有 cygwin 可能会更容易。

我不明白你为什么要指定它。大多数应用程序都会在环境中固有地使用 JAVA_HOME,因此如果您在全局范围内设置了它,应用程序应该直接选择它,然后不需要 conf 文件中的任何内容。我想如果你有多个 java 安装并且你需要在每个应用程序的基础上进行选择,但是我会在做任何其他事情之前设置启动脚本 JAVA_HOME,然后再次将它从 .conf 中删除并让应用程序捡起来就好了。

【讨论】:

我认为我在这里所做的是避免在脚本中使用硬编码路径值,因为我们在服务器上运行了多个 Java 应用程序,当 Oracle 发布新更新时我们需要更新 JRE 并且我们有漏洞.删除硬编码路径可以节省我们的时间并减少出错的可能性?不确定您关于首先设置 JAVA_HOME 的最后一句话并将其删除。你能解释一下吗?谢谢。 请查看我在原始帖子中编辑的部分。我可以使用 set.default.JAVA_HOME=... 在 JRE 更新时自动获取系统默认 JAVA_HOME 值,并且还可以使用旧安装的 JRE 进行备份?非常感谢。 也许...再次,这取决于 java 包装器如何处理它,但假设 %JAVA_HOME%\bin 在您的路径中,那么 wrapper.java.command=java

以上是关于如何在应用程序启动脚本中用环境变量替换硬编码的 JAVA_HOME?的主要内容,如果未能解决你的问题,请参考以下文章

Github GraphQL API,硬编码访问令牌有效,试图混淆它没有

如何在编码中用“.xib”文件替换情节提要

替换WordPress插件中的硬编码JavaScript字符串

如何在Python中实现argparse

如何在 bash 脚本中用多行/流替换单个流/行?

在初始化脚本中启动时如何设置会话 DBus 的环境变量?