环境variables来控制java.io.tmpdir?
我使用TMP
环境variables来控制gcc写入临时文件的地方,但是我似乎无法find与java的createTempFile API等价的东西。
这样的环境variables是否存在?
嗯,因为这是由JVM处理的,所以我深入研究了OpenJDK VM源代码,认为OpenJDK完成的工作可能会模仿Java 6和之前的版本。 有一种方法可以做到这一点,而不是在Windows上。
在Windows上 ,OpenJDK的get_temp_directory()
函数对GetTempPath()
进行Win32 API调用; 这是如何在Windows上,Java体现了TMP
环境variables的价值。
在Linux和Solaris上 ,同样的get_temp_directory()
函数返回静态值/tmp/
。
我不知道实际的JDK6是否遵循这些确切的约定,但是通过每个列出的平台上的行为,似乎是这样。
根据java.io.File
Java Docs
默认的临时文件目录由系统属性java.io.tmpdir指定。 在UNIX系统上,这个属性的默认值通常是“/ tmp”或“/ var / tmp”; 在Microsoft Windows系统上,它通常是“c:\ temp”。 在调用Java虚拟机时,可能会给此系统属性赋予不同的值,但对此属性的编程更改不保证对此方法使用的临时目录有任何影响。
要指定java.io.tmpdir
系统属性,可以按如下所示调用JVM:
java -Djava.io.tmpdir=/path/to/tmpdir
默认情况下,这个值应该来自Windows系统上的TMP
环境variables
你可以设置你的_JAVA_OPTIONS
环境variables。 举个例子,在bash中,这可以做到这一点:
export _JAVA_OPTIONS=-Djava.io.tmpdir=/new/tmp/dir
我把它放到我的bashlogin脚本,它似乎是做的伎俩。
使用
$ java -XshowSettings Property settings: java.home = /home/nisar/javadev/javasuncom/jdk1.7.0_17/jre java.io.tmpdir = /tmp
这不是一个环境variables,但仍然可以控制临时目录:
-Djava.io.tmpdir
例:
java -Djava.io.tmpdir=/mytempdir
要清楚这里发生了什么事情:
-
build议设置临时目录位置的方法是设置名为“java.io.tmpdir”的System属性,例如通过给
java
选项-Djava.io.tmpdir=/mytempdir
选项。 该属性也可以通过调用System.setProperty("java.io.tmpdir", "/mytempdir)
…模块沙箱安全问题从程序内更改。 -
如果在启动时没有显式设置“java.io.tmpdir”属性,则JVM将其初始化为特定于平台的默认值。 对于Windows,通过调用Win32 API方法获得默认值。 对于Linux / Solaris,默认显然是硬连线的。 对于其他JVM,它可能是其他的东西。
经验上,“TMP”环境variables适用于Windows(使用当前的JVM),但不适用于其他平台。 如果你关心可移植性,你应该明确地设置系统属性。
- 代码签名错误:应用程序标识符“com.reapptive.Floors2Go”与当前设置“com.reapptive.Floors2Go”不匹配
- 如何在不同的工作区共享eclipseconfiguration
- 典型的./configure在Linux中有什么作用?
- 我怎样才能获得当前的屏幕方向?
- 与类库一起使用app.config
- 我怎样才能在Vim中插入一个真正的制表符?
- iPhonedebugging:如何解决“没有得到进程的任务”?
- Xcode 4 – 在新的Macintosh安装上设置configuration文件时出现“找不到有效的签名标识”错误
- 错误ITMS-90164/90046:无效的代码签名权利