He usado la TMP
variable de entorno para controlar cosas como donde gcc escribe sus archivos temporales, pero parece que no puedo encontrar un equivalente para la API createTempFile de Java .
¿Existe tal variable de entorno?
He usado la TMP
variable de entorno para controlar cosas como donde gcc escribe sus archivos temporales, pero parece que no puedo encontrar un equivalente para la API createTempFile de Java .
¿Existe tal variable de entorno?
Respuestas:
Hmmm, dado que esto lo maneja la JVM, profundicé un poco en el código fuente de OpenJDK VM, pensando que tal vez lo que hace OpenJDK imita lo que hace Java 6 y versiones anteriores. No es tranquilizador que haya una forma de hacer esto que no sea Windows.
En Windows , la get_temp_directory()
función de OpenJDK realiza una llamada API de Win32 a GetTempPath()
; así es como en Windows, Java refleja el valor de la TMP
variable de entorno.
En Linux y Solaris , las mismas get_temp_directory()
funciones 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í.
-Djava.io.tmpdir
opción de línea de comando para la JVM), y si ese valor predeterminado se ve afectado en todo por un valor medioambiental. Como la gente había observado, en Windows se ve afectado por la TMP
variable de entorno, pero no estaba claro si había alguna variable desconocida para otros sistemas operativos. Parece que no lo hay, al menos dado lo que sabemos sobre OpenJDK.
GetTempPath()
no se ve afectado solo por la TMP
variable de entorno: msdn.microsoft.com/en-us/library/aa364992%28VS.85%29.aspx
/var/tmp/
(con barra inclinada), incluso hay un error # 4391434 para eso. Y para Mac OS y Linux es/tmp
, ¡qué lío!
oracle-java8-jdk=8u102
(linux)
Según java.io.File
Java Docs
El directorio de archivos temporales predeterminado lo especifica la propiedad del sistema java.io.tmpdir. En los sistemas UNIX, el valor predeterminado de esta propiedad suele ser "/ tmp" o "/ var / tmp"; en los sistemas Microsoft Windows suele ser "c: \ temp". Se puede dar 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 a esta propiedad tengan ningún efecto sobre el directorio temporal utilizado por este método.
Para especificar la java.io.tmpdir
propiedad del sistema, puede invocar la JVM de la siguiente manera:
java -Djava.io.tmpdir=/path/to/tmpdir
De forma predeterminada, este valor debe provenir de la TMP
variable de entorno en los sistemas Windows.
java.io.tmpdir
se define utilizando la función SDK de Windows GetTempPath
( msdn.microsoft.com/en-us/library/aa364992%28VS.85%29.aspx ) que se resolverá en TMP o TEMP o USERPROFILE o el directorio de Windows si cada uno de el anterior no está definido.
Podrías establecer tu _JAVA_OPTIONS
variable ambiental. 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 de bash y parece funcionar.
Picked up _JAVA_OPTIONS:
esto confunde completamente nuestro proceso de compilación.
JAVA_TOOL_OPTIONS
es más portable.
Utilizar
$ java -XshowSettings
Property settings:
java.home = /home/nisar/javadev/javasuncom/jdk1.7.0_17/jre
java.io.tmpdir = /tmp
Para tener claro lo que está pasando aquí:
La forma recomendada de 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 java
comando. La propiedad también se puede cambiar desde dentro de un programa llamando a System.setProperty("java.io.tmpdir", "/mytempdir)
... modulo sandbox security issues.
Si no establece explícitamente la propiedad "java.io.tmpdir" en el 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 valor predeterminado aparentemente está cableado. Para otras JVM, podría ser otra cosa.
Empíricamente, la variable de entorno "TMP" funciona en Windows (con las JVM actuales), pero no en otras plataformas. Si le preocupa la portabilidad, debe establecer explícitamente la propiedad del sistema.