如何设置Java系统属性,使其在启动JVM时生效,而无需将其添加到命令行参数中。

43

在Java 1.7中,从操作系统获取默认Locale的方式发生了变化。有一些方法可以恢复旧的行为,例如在启动JVM实例时设置标志-Dsun.locale.formatasdefault=true。

我希望永久设置此标志,以便我不必每次启动JVM实例时都在命令行参数中指定它。是否有文件或其他可能性可以更改JVM的默认设置?类似于Eclipse.ini文件但是用于JVM本身的文件。


我不认为有这样的功能,但是你可以创建一个Boot类,它会自动执行你的程序(使用另一个类中的“真正”的main方法),并且带有所需的命令行参数。 - FThompson
1个回答

59

你可以在操作系统中设置环境变量JAVA_TOOL_OPTIONS。所有的Java工具(java, javac, ..)都会获取这个变量并使用它。例如,你可以这样使用:

SET JAVA_TOOL_OPTIONS=-Dsun.locale.formatasdefault=true
我使用这个方法来为每个JVM强制指定特定的区域设置。
但是,只有当您的应用程序通过Java工具启动时才能起作用。如果它是从调用jvm DLL的C程序中启动的,那么这个方法将无法生效。
编辑:我刚刚测试了一下,似乎当DLLs被启动时也会使用JAVA_TOOLS_OPTIONS(通过一个使用WinRun4J作为启动器的Swing应用程序进行验证)。
请参阅:http://docs.oracle.com/javase/7/docs/webnotes/tsg/TSG-VM/html/envvars.html

4
我们使用 _JAVA_OPTIONS,这对我们的使用似乎有效,但我不知道是否适用于通过 DLL 进行调用,我怀疑不行。 - MadProgrammer
@MadProgrammer:有趣。我不知道_JAVA_OPTIONS的存在。 - user330315
@a_horse_with_no_name 不,我也是大约一周前才知道的。 - MadProgrammer
关于_JAVA_OPTIONS的信息 - Vadzim
有没有人能帮我澄清一下,如果我想要添加一个系统属性xyz-abc.dest="path",我是否必须在它之前加上“-D”? - Vikas Tawniya

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接