Usei a TMP
variável de ambiente para controlar coisas como onde o gcc grava seus arquivos temporários, mas não consigo encontrar um equivalente para a API createTempFile do java .
Essa variável de ambiente existe?
java
configuration
environment-variables
temp
Zach Hirsch
fonte
fonte
Respostas:
Hmmm - já que isso é feito pela JVM, eu mergulhei um pouco no código-fonte da VM OpenJDK, pensando que talvez o que é feito pelo OpenJDK imita o que é feito pelo Java 6 e anteriores. Não é reconfortante que haja uma maneira de fazer isso diferente do Windows.
No Windows , a
get_temp_directory()
função do OpenJDK faz uma chamada de API do Win32 paraGetTempPath()
; é assim que no Windows, Java reflete o valor daTMP
variável de ambiente.No Linux e Solaris , as mesmas
get_temp_directory()
funções retornam um valor estático de/tmp/
.Não sei se o JDK6 real segue essas convenções exatas, mas pelo comportamento em cada uma das plataformas listadas, parece que sim.
fonte
-Djava.io.tmpdir
opção de linha de comando para a JVM), e se esse valor padrão é afetado em tudo por um valor ambiental. Como as pessoas observaram, no Windows ele é afetado pelaTMP
variável de ambiente, mas não estava claro se havia alguma variável desconhecida para outros sistemas operacionais. Parece que não existe, pelo menos considerando o que sabemos sobre o OpenJDK.GetTempPath()
não é afetado apenas pelaTMP
variável de ambiente: msdn.microsoft.com/en-us/library/aa364992%28VS.85%29.aspx/var/tmp/
(com uma barra inicial), há até o bug # 4391434 para isso. E para Mac OS e Linux é/tmp
- que bagunça!oracle-java8-jdk=8u102
(linux)De acordo com o
java.io.File
Java DocsPara especificar a
java.io.tmpdir
propriedade do sistema, você pode invocar o JVM da seguinte maneira:Por padrão, este valor deve vir da
TMP
variável de ambiente em sistemas Windowsfonte
java.io.tmpdir
é definido usando a função Windows SDKGetTempPath
( msdn.microsoft.com/en-us/library/aa364992%28VS.85%29.aspx ) que resolverá para TMP ou TEMP ou USERPROFILE ou o diretório do Windows se cada um dos o anterior não está definido.Você pode definir sua
_JAVA_OPTIONS
variável ambiental. Por exemplo, no bash, isso resolveria o problema:Eu coloquei isso em meu script de login do bash e parece funcionar.
fonte
Picked up _JAVA_OPTIONS:
Isso confunde completamente nosso processo de construção.JAVA_TOOL_OPTIONS
é mais portátil.Usar
fonte
Não é uma variável de ambiente, mas ainda fornece controle sobre o diretório temporário:
ex.:
fonte
Para ser claro sobre o que está acontecendo aqui:
A maneira recomendada de definir a localização do diretório temporário é definir a propriedade do sistema chamada "java.io.tmpdir", por exemplo, dando a opção
-Djava.io.tmpdir=/mytempdir
para ojava
comando. A propriedade também pode ser alterada de dentro de um programa chamandoSystem.setProperty("java.io.tmpdir", "/mytempdir)
... modulo sandbox security issues.Se você não definir explicitamente a propriedade "java.io.tmpdir" na inicialização, a JVM a inicializa com um valor padrão específico da plataforma . Para Windows, o padrão é obtido por uma chamada a um método da API Win32. Para Linux / Solaris, o padrão é aparentemente conectado fisicamente. Para outras JVMs, pode ser outra coisa.
Empiricamente, a variável de ambiente "TMP" funciona no Windows (com JVMs atuais), mas não em outras plataformas. Se você se preocupa com a portabilidade, deve definir explicitamente a propriedade do sistema.
fonte
Use o comando abaixo no terminal UNIX:
Isso exibirá todas as propriedades java e configurações do sistema. Nesta busca por
java.io.tmpdir
valor.fonte