variable valid not mostrar java_home home ensure determine could cannot java configuration environment-variables temp

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 comando java . La propiedad también se puede cambiar desde un programa llamando a System.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