J'ai utilisé la TMP
variable d'environnement pour contrôler des choses comme l'endroit où gcc écrit ses fichiers temporaires, mais je n'arrive pas à trouver un équivalent pour l' API createTempFile de java .
Une telle variable d'environnement existe-t-elle?
java
configuration
environment-variables
temp
Zach Hirsch
la source
la source
Réponses:
Hmmm - puisque cela est géré par la JVM, j'ai fouillé un peu dans le code source de la VM OpenJDK, pensant que peut-être ce qui est fait par OpenJDK imite ce qui est fait par Java 6 et antérieurs. Il n'est pas rassurant qu'il existe un moyen de le faire autrement que sous Windows.
Sous Windows , la
get_temp_directory()
fonction d'OpenJDK effectue un appel d'API Win32 àGetTempPath()
; c'est ainsi que sous Windows, Java reflète la valeur de laTMP
variable d'environnement.Sous Linux et Solaris , les mêmes
get_temp_directory()
fonctions renvoient une valeur statique de/tmp/
.Je ne sais pas si le JDK6 réel suit ces conventions exactes, mais par le comportement sur chacune des plates-formes répertoriées, il semble que ce soit le cas.
la source
-Djava.io.tmpdir
option de ligne de commande de la JVM), et si cette valeur par défaut est affectée à le tout par une valeur environnementale. Comme les gens l'avaient observé, sous Windows, il est affecté par laTMP
variable d'environnement, mais il n'était pas clair s'il y avait une variable inconnue pour d'autres systèmes d'exploitation. Il semble qu'il n'y en ait pas, du moins compte tenu de ce que nous savons d'OpenJDK.GetTempPath()
n'est pas affecté uniquement par laTMP
variable d'environnement: msdn.microsoft.com/en-us/library/aa364992%28VS.85%29.aspx/var/tmp/
(avec une barre oblique principale), il y a même un bogue # 4391434 pour cela. Et pour Mac OS et Linux c'est/tmp
- quel gâchis!oracle-java8-jdk=8u102
(linux)Selon les
java.io.File
documents JavaPour spécifier la
java.io.tmpdir
propriété System, vous pouvez appeler la JVM comme suit:Par défaut, cette valeur doit provenir de la
TMP
variable d'environnement sur les systèmes Windowsla source
java.io.tmpdir
est défini à l'aide de la fonction Windows SDKGetTempPath
( msdn.microsoft.com/en-us/library/aa364992%28VS.85%29.aspx ) qui se résoudra en TMP ou TEMP ou USERPROFILE ou le répertoire Windows si chacun des le précédent n'est pas défini.Vous pouvez définir votre
_JAVA_OPTIONS
variable environnementale. Par exemple, dans bash, cela ferait l'affaire:Je l'ai mis dans mon script de connexion bash et cela semble faire l'affaire.
la source
Picked up _JAVA_OPTIONS:
cela confond complètement notre processus de construction.JAVA_TOOL_OPTIONS
est plus portable.Utilisation
la source
Ce n'est pas une variable d'environnement, mais vous donne toujours le contrôle sur le répertoire temporaire:
ex.:
la source
Pour être clair sur ce qui se passe ici:
La manière recommandée de définir l'emplacement du répertoire temporaire est de définir la propriété System appelée "java.io.tmpdir", par exemple en donnant l'option
-Djava.io.tmpdir=/mytempdir
à lajava
commande. La propriété peut également être modifiée à partir d'un programme en appelantSystem.setProperty("java.io.tmpdir", "/mytempdir)
... modulo sandbox security issues.Si vous ne définissez pas explicitement la propriété "java.io.tmpdir" au démarrage, la JVM l'initialise avec une valeur par défaut spécifique à la plate - forme . Pour Windows, la valeur par défaut est obtenue par un appel à une méthode API Win32. Pour Linux / Solaris, la valeur par défaut est apparemment câblée. Pour d'autres JVM, cela pourrait être autre chose.
Empiriquement, la variable d'environnement "TMP" fonctionne sur Windows (avec les JVM actuels), mais pas sur d'autres plates-formes. Si vous vous souciez de la portabilité, vous devez définir explicitement la propriété système.
la source
Utilisez la commande ci-dessous sur le terminal UNIX:
Cela affichera toutes les propriétés java et les paramètres système. Dans cette recherche de
java.io.tmpdir
valeur.la source