129 votes

Variable d'environnement pour contrôler java.io.tmpdir ?

J'ai utilisé le TMP pour contrôler des choses comme l'endroit où gcc écrit ses fichiers temporaires, mais je n'arrive pas à trouver un équivalent pour la variable d'environnement java createTempFile API.

Une telle variable d'environnement existe-t-elle ?

0 votes

Le lien actuel est [java.sun.com/javase/6/docs/api/java/io/](http://java.sun.com/javase/6/docs/api/java/io/File.html#createTempFile(java.lang.String) , java.lang.String, java.io.File) Stackoverflow ne fait pas le bon choix lorsque je mets cette URL (ou lorsque je remplace les parenthèses par %28 et %29). Je sais que l'utilisation de l'URL courte craint, mais je me suis dit que c'était mieux que pas de lien du tout.

0 votes

J'ai corrigé le lien. Le SO fait très bien la bonne chose.

1 votes

Merci. Je suppose que l'astuce était aussi de remplacer les espaces par %20

138voto

Bryan Kyle Points 5931

Selon le java.io.File Docs Java

Le répertoire par défaut du fichier temporaire est spécifié par la propriété système java.io.tmpdir. Sur les systèmes UNIX, la valeur par défaut de cette propriété est généralement "/tmp" ou "/var/tmp" ; sur les systèmes Microsoft Windows, elle est généralement "c : \temp ". Une valeur différente peut être donnée à cette propriété système lorsque la machine virtuelle Java est invoquée, mais il n'est pas garanti que les modifications programmatiques de cette propriété aient un effet sur le répertoire temporaire utilisé par cette méthode.

Pour spécifier le java.io.tmpdir System, vous pouvez invoquer la JVM comme suit :

java -Djava.io.tmpdir=/path/to/tmpdir

Par défaut, cette valeur doit provenir du TMP variable d'environnement sur les systèmes Windows

2 votes

Cela ne répond pas à ma question. Y a-t-il une variable d'environnement qui contrôle cela ?

3 votes

Malgré votre modification, Bryan, java.io.tmpdir ne suit définitivement pas la variable d'environnement TMPDIR sur Mac ou sur Ubuntu (testé sur 6.06).

0 votes

Oy, et un autre montage, rendant tous ces commentaires insensés.

128voto

delfuego Points 9288

Hmmm -- puisque c'est géré par la JVM, je me suis un peu plongé 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érieur. Il n'est pas rassurant de savoir qu'il y a un moyen de faire cela autrement que sous Windows.

Sur Windows (ligne 996), la méthode d'OpenJDK get_temp_directory() fait un appel de l'API Win32 à GetTempPath() ; c'est ainsi que sous Windows, Java reflète la valeur de l'option TMP variable d'environnement.

Sur Linux (ligne 1515) et Solaris (ligne 1828), le même get_temp_directory() renvoient une valeur statique de "/tmp/".

Je ne sais pas si le JDK6 actuel suit ces conventions exactes, mais d'après le comportement sur chacune des plateformes listées, il semble que ce soit le cas.

46 votes

Pour être clair, ce que vous regardez, c'est le code natif qui fournit l'accès à l'information. valeur par défaut pour la propriété "java.io.tmpdir" lorsque la JVM crée l'objet System properties. Cette valeur sera remplacée par (par exemple) une option "-Djava.io.tmpdir=...".

7 votes

@StephenC, oui, c'est bien cela, l'OP cherchait à savoir comment la valeur par défaut de la propriété est définie en l'absence de définition par vous-même (via l'attribut -Djava.io.tmpdir à la JVM), et si cette valeur par défaut est affectée par une valeur d'environnement. Comme on l'avait observé, sous Windows, il est touchés par la TMP mais il n'est pas clair s'il existe une variable inconnue pour d'autres systèmes d'exploitation. Il semble qu'il n'y en ait pas, du moins d'après ce que nous savons d'OpenJDK.

5 votes

Bonne réponse, mais sur Windows GetTempPath() n'est pas affecté uniquement par le TMP variable d'environnement : msdn.microsoft.com/fr/us/library/aa364992%28VS.85%29.aspx

69voto

John St. John Points 456

Vous pouvez définir votre _JAVA_OPTIONS variable environnementale. Par exemple, dans bash, ceci ferait l'affaire :

export _JAVA_OPTIONS=-Djava.io.tmpdir=/new/tmp/dir

J'ai mis cela dans mon login bash script et cela semble faire l'affaire.

4 votes

Bien que cela semble fonctionner sous Linux et MacOSX, cela a l'effet secondaire malheureux d'imprimer une sortie supplémentaire à chaque lancement de java : Picked up _JAVA_OPTIONS: Cela perturbe complètement notre processus de construction.

3 votes

J'ai voté en faveur de cette réponse parce qu'elle répond à la question de l'utilisateur et que celui-ci n'a pas précisé le système d'exploitation ou la volonté d'éviter tout autre effet secondaire. Je pense que cette réponse devrait être considérée comme la meilleure réponse.

5 votes

Cette variable semble être spécifique à Sun JVM -- par exemple, la JVM J9 d'IBM ne la supporte pas ; elle supporte plutôt IBM_JAVA_OPTIONS.

43voto

Nisar Points 31

Utilisez

$java -XshowSettings<br/>
Property settings:<br/>
    java.home = /home/nisar/javadev/javasuncom/jdk1.7.0_17/jre<br/>
    java.io.tmpdir = /tmp

28voto

Bozho Points 273663

Ce n'est pas une variable d'environnement, mais cela vous permet de contrôler le répertoire temporaire :

-Djava.io.tmpdir

ex. : java -Djava.io.tmpdir=/mytempdir

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X