He usado la TMPvariable 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 TMPvariable 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 TMPvariable 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.tmpdiropció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 TMPvariable 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 TMPvariable 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.FileJava 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.tmpdirpropiedad 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 TMPvariable de entorno en los sistemas Windows.
java.io.tmpdirse 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_OPTIONSvariable 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_OPTIONSes 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=/mytempdiral javacomando. 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.