【发布时间】:2019-04-25 21:26:36
【问题描述】:
我知道$JAVA_HOME、$AIR_HOME 等是什么,我知道如何设置它们。事实上,我正在为使用 Java 或 Adobe AIR 而初始化的每个虚拟环境中设置它们,但我不明白为什么要这样做。我的问题更多是关于忽略$*_HOME 变量并仅使用系统提供的二进制文件(在$PATH 中)的后果。
除了查找正确版本的二进制文件之外,它还用于其他用途吗?应用程序似乎从未将它用于其他任何事情,并且包维护者、系统管理员和用户有责任在$PATH 中提供这些内容。有方便的虚拟环境管理器让用户在环境之间轻松切换并选择保存的$PATH 预设,该预设指向给定用户会话的给定二进制文件的正确版本。虽然通常可以编写设置自定义环境变量的“onSwitch”钩子,但它总是需要额外的工作。
有人建议它帮助分叉的应用程序运行与其父级相同版本的二进制文件,但它已经得到照顾,因为两个进程都应该从$PATH 运行二进制文件,而$PATH 由子进程继承来自父母。
Tomcat 和 Gradle 或 Adobe AIR 等项目的开发人员依赖 $*_HOME 变量而不是 $PATH 提供的变量的原因是什么?该约定从何而来,为什么仍在使用?
【问题讨论】:
-
有哪些 Java 开发人员?我从没见过。
-
大部分工具都使用它。 Maven、Gradle、应用服务器等。这允许使用的版本保持一致。如果您使用 JAVA_HOME 启动一个应用程序,那么该应用程序会使用相同的 JAVA_HOME 启动另一个应用程序,因此两个应用程序使用相同的 java 版本。
-
我开始认为我问这个问题是个错误,因为无论出于何种原因,很多人似乎都依附于该变量。除此之外,如果我在一个环境中运行一个应用程序并且它运行另一个应用程序它在同一个环境中 - 当有 $PATH 时仍然不需要人工变量。
-
@user207421 例如,我在 Tomcat 和 Gradle 中看到过,编辑了问题。
标签: java air environment-variables