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?
java
configuration
environment-variables
temp
Zach Hirsch
fuente
fuente
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 aGetTempPath()
; así es como en Windows, Java refleja el valor de laTMP
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í.
fuente
-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 laTMP
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 laTMP
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 DocsPara especificar la
java.io.tmpdir
propiedad del sistema, puede invocar la JVM de la siguiente manera:De forma predeterminada, este valor debe provenir de la
TMP
variable de entorno en los sistemas Windows.fuente
java.io.tmpdir
se define utilizando la función SDK de WindowsGetTempPath
( 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:Lo puse en mi script de inicio de sesión de bash y parece funcionar.
fuente
Picked up _JAVA_OPTIONS:
esto confunde completamente nuestro proceso de compilación.JAVA_TOOL_OPTIONS
es más portable.Utilizar
fuente
No es una variable de entorno, pero aún le da control sobre el directorio temporal:
ex.:
fuente
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
aljava
comando. La propiedad también se puede cambiar desde dentro de un programa llamando aSystem.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.
fuente
Utilice el siguiente comando en la terminal UNIX:
Esto mostrará todas las propiedades de Java y la configuración del sistema. En esta búsqueda de
java.io.tmpdir
valor.fuente