valid - set environment variable java
Variable de entorno para controlar java.io.tmpdir? (6)
De acuerdo con java.io.File
Java Docs
El directorio predeterminado de archivos temporales es especificado por la propiedad del sistema java.io.tmpdir. En sistemas UNIX, el valor predeterminado de esta propiedad es típicamente "/ tmp" o "/ var / tmp"; en sistemas Microsoft Windows es típicamente "c: / temp". Se puede otorgar un valor diferente a esta propiedad del sistema cuando se invoca la máquina virtual Java, pero no se garantiza que los cambios programáticos de esta propiedad tengan ningún efecto sobre el directorio temporal utilizado por este método.
Para especificar la propiedad del sistema java.io.tmpdir
, puede invocar la JVM de la siguiente manera:
java -Djava.io.tmpdir=/path/to/tmpdir
Por defecto, este valor debe provenir de la variable de entorno TMP
en sistemas Windows
He usado la variable de entorno TMP
para controlar cosas como gcc escribe sus archivos temporales, pero parece que no puedo encontrar un equivalente para la API createTempFile de java.
¿Existe tal variable de entorno?
Hmmm, como esto lo maneja la JVM, profundicé un poco en el código fuente de la VM OpenJDK, pensando que tal vez lo que hace OpenJDK imita lo que han hecho Java 6 y anteriores. No es tranquilizador que haya una forma de hacer esto que no sea Windows.
En Windows , la función get_temp_directory()
OpenJDK realiza una llamada de la API de Win32 a GetTempPath()
; así es como en Windows, Java refleja el valor de la variable de entorno TMP
.
En Linux y Solaris , las mismas funciones get_temp_directory()
devuelven un valor estático de /tmp/
.
No sé si el JDK6 real sigue estas convenciones exactas, pero por el comportamiento en cada una de las plataformas enumeradas, parece que sí lo hacen.
No es una variable de entorno, pero aún así le da control sobre el directorio temporal:
-Djava.io.tmpdir
ex.:
java -Djava.io.tmpdir=/mytempdir
Para ser claro sobre lo que está pasando aquí:
La forma recomendada para establecer la ubicación del directorio temporal es establecer la propiedad del sistema llamada "java.io.tmpdir", por ejemplo, dando la opción
-Djava.io.tmpdir=/mytempdir
al comandojava
. La propiedad también se puede cambiar desde un programa llamando aSystem.setProperty("java.io.tmpdir", "/mytempdir)
... problemas de seguridad del módulo sandbox.Si no establece explícitamente la propiedad "java.io.tmpdir" al inicio, la JVM la inicializa a un valor predeterminado específico de la plataforma . Para Windows, el valor predeterminado se obtiene mediante una llamada a un método API de Win32. Para Linux / Solaris, el predeterminado es aparentemente cableado. Para otras JVM podría ser otra cosa.
Empíricamente, la variable de entorno "TMP" funciona en Windows (con JVM actuales), pero no en otras plataformas. Si le importa la portabilidad, debe establecer explícitamente la propiedad del sistema.
Puede establecer su variable de entorno _JAVA_OPTIONS
. Por ejemplo en bash esto haría el truco:
export _JAVA_OPTIONS=-Djava.io.tmpdir=/new/tmp/dir
Lo puse en mi script de inicio de sesión bash y parece ser el truco.
Utilizar
$ java -XshowSettings
Property settings:
java.home = /home/nisar/javadev/javasuncom/jdk1.7.0_17/jre
java.io.tmpdir = /tmp