我使用以下链接来了解环境变量和系统属性。
https://docs.oracle.com/javase/tutorial/essential/environment/env.html
该链接表示环境变量由操作系统设置并传递给应用程序。
当我使用 System.getenv() 获取环境变量时,它向我显示了许多我从未设置过的属性。
所以它一定是操作系统(我使用的是 macOS)设置了这些属性。
System.getenv()
中的一些属性为 MAVEN_CMD_LINE_ARGS、JAVA_MAIN_CLASS_1420、JAVA_MAIN_CLASS_1430。
我的问题是为什么操作系统要在环境变量中设置 java 特定属性?理想情况下,这些应该由 JVM 设置(在 System.properties()
中)。
P.S.:从我在网上读到的内容来看,我了解到环境变量是由操作系统设置的,而 System.properties() 是由 JVM 设置的
此外,如果有人可以向我指出有关环境变量和 System.properties 的良好链接,那将非常有帮助。我对这两者很困惑。
最佳答案
环境变量是一个操作系统概念,由启动 Java 程序的程序传递。
这通常是操作系统,例如双击资源管理器窗口或在命令提示符中运行命令,即可获取操作系统管理的环境变量列表。
如果另一个程序启动您的 Java 程序1,例如IDE(Eclipse、IntelliJ、NetBeans...)或构建工具(Maven、Groovy...),它可以修改环境变量列表,通常是添加更多变量。例如。名为 MAVEN_CMD_LINE_ARGS
的环境变量往往表明您可能正在使用 Maven 运行程序。
在运行的Java程序中,环境变量列表无法修改。
系统属性是一个Java概念。 JVM会自动分配很多 启动时的系统属性。
您可以使用 -D
命令行参数在启动时添加/覆盖这些值。
在正在运行的 Java 程序中,系统属性列表可以由程序本身修改,尽管这通常是一个坏主意。
1) 作为引用,如果一个Java程序想要启动另一个Java程序,它通常会使用 ProcessBuilder
进行设置。新Java进程的环境变量默认与当前Java程序相同,但可以通过调用 environment()
为新Java程序进行修改。构建器的方法。
关于java - 环境变量和系统属性之间的区别,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60925254/