Java系统环境变量

Java系统环境变量

问题描述:

Java是否有默认的系统环境变量,当我们设置它时,它总是会被读取/追加? CATALINA_OTPS/JAVA_OPTS等似乎只对TOMCAT/JBOSS等Java系统环境变量

  1. 我不想把它通过Java系统属性(这是通过-Dprop1 =值-Dprop2 =数值传递),因为它涉及到壳/批脚本。
  2. 它应该跨越操作系统,比如Windows中的双击jar文件。
  3. 它应该跨越不同的JRE(Sun,IBM,OpenJDK等)。
  4. 它不应该涉及额外的编码。
  5. 它应该在大多数库配置文件中工作,如设置log4j 级别$ {LOG_LEVEL}。

更新:新增项目#4和5,从标题删除OS,使我的问题更加清晰。

更新2:看着感知的回答后,就好像我的项目2和3可以通过System.getenv实现。如何实现项目4和5?

下面是场景示例: 现在想象一下JAVA_DEFAULT_OPTS是一个环境变量,它将被Java读取,因为它现在已经成为标准。在开发台式机上,我设置了JAVA_DEFAULT_OPTS=-DLOG_LEVEL=DEBUG -Xmx384m;在生产服务器机器上,客户设置为JAVA_DEFAULT_OPTS=-DLOG_LEVEL=INFO -Xmx1024m。当我/用户双击Windows上的jar文件时,应用程序将运行不同的log4j级别和最大内存堆大小。

有一个特殊的环境变量叫做_JAVA_OPTIONS,它的值将被JVM(java.exe)拾取。

在Windows中:

set _JAVA_OPTIONS=-Xms64m -Xmx128m -Dawt.useSystemAAFontSettings=lcd 

在Linux中:

export _JAVA_OPTIONS='-Xms64m -Xmx128m -Dawt.useSystemAAFontSettings=lcd' 

对于Java Web Start的是JAVAWS_VM_ARGS。对于javaw.exe(小程序),它是_JPI_VM_OPTIONS

+0

它的工作原理。至少在使用Sun JRE的Windows中。 Linux也应该工作(http://stackoverflow.com/a/1508684/418439)。任何人都可以告诉我,如果Mac也可以工作这是复活节彩蛋吗?它甚至没有正式记录在http://docs.oracle.com/javase/6/docs/technotes/tools/windows/java.html。我应该问几年......( – 2012-03-13 03:27:43

+0

@CKLee,你可以在Java 2D文档中找到它,https://docs.oracle.com/javase/8/docs/technotes/guides/2d /flags.html和http://docs.oracle.com/javase/7/docs/webnotes/tsg/TSG-Desktop/html/plugin.html – RealHowTo 2015-03-26 21:50:26

Java有当JVM启动总是被设置标准OS系统环境变量:

  • os.name
  • os.arch
  • os.version

所有可通过'System.getProperty(propertyName)'访问'

如果你还需要更多的东西,你可以随时如Management API

+0

你的意思是Java Management Extensions(JMX)API?如何做到这一点没有额外的编码? – 2012-03-13 02:00:32

+0

包含指向Management API的链接。不确定'额外编码'是什么意思,你必须至少写出访问你需要的信息所需的一行或两行代码。 – Perception 2012-03-13 02:04:08

+0

我已经添加了项目#5,使我的问题更清晰。 – 2012-03-13 02:06:01