TMP
環境変数を使用して、gccが一時ファイルであることを書き込む場所などを制御しましたが、JavaのcreateTempFile APIに相当するものを見つけることができないようです。
そのような環境変数は存在しますか?
TMP
環境変数を使用して、gccが一時ファイルであることを書き込む場所などを制御しましたが、JavaのcreateTempFile APIに相当するものを見つけることができないようです。
そのような環境変数は存在しますか?
回答:
うーん-これはJVMによって処理されるため、OpenJDK VMのソースコードを少し掘り下げ、OpenJDKで行われたことがJava 6以前で行われたことを模倣しているのではないかと考えました。Windows以外でこれを行う方法があることは安心できません。
上のWindows、OpenJDKののget_temp_directory()
機能は、Win32 APIの呼び出しにしますGetTempPath()
。これは、WindowsでJavaがTMP
環境変数の値を反映する方法です。
上のLinuxおよびSolarisの、同じget_temp_directory()
機能がの静的な値を返します/tmp/
。
実際のJDK6がこれらの厳密な規則に準拠しているかどうかはわかりませんが、リストされている各プラットフォームでの動作により、実際に準拠しているようです。
-Djava.io.tmpdir
JVMのコマンドラインオプションを介して)にどのように設定されるかを探していました。すべて環境値によって。人々が観察したように、Windowsではさによって影響を受けるTMP
環境変数が、他のOSのためのいくつかの未知の変数があったかどうかは不明でした。少なくともOpenJDKについて私たちが知っていることを考えると、そうではないようです。
GetTempPath()
だけでは影響を受けませんTMP
:msdn.microsoft.com/en-us/library/aa364992%28VS.85%29.aspx
/var/tmp/
(先行スラッシュ付き)であることがわかりました。そのためのバグ#4391434さえあります。そしてMac OSとLinuxの場合、それは/tmp
なんてめちゃくちゃなことでしょう。
oracle-java8-jdk=8u102
(Linux)で動作します
デフォルトの一時ファイルディレクトリは、システムプロパティjava.io.tmpdirによって指定されます。UNIXシステムでは、このプロパティのデフォルト値は通常「/ tmp」または「/ var / tmp」です。Microsoft Windowsシステムでは、通常「c:\ temp」です。Java仮想マシンが呼び出されると、このシステムプロパティに別の値が与えられる可能性がありますが、このプロパティへのプログラムによる変更が、このメソッドで使用される一時ディレクトリに影響を与えるとは限りません。
java.io.tmpdir
Systemプロパティを指定するには、次のようにJVMを呼び出すことができます。
java -Djava.io.tmpdir=/path/to/tmpdir
デフォルトでは、この値は TMP
Windowsシステムの環境変数ます
java.io.tmpdir
Windows SDK関数GetTempPath
(msdn.microsoft.com/en-us/library/aa364992%28VS.85%29.aspx)を使用して定義され、TMPまたはTEMPまたはUSERPROFILEまたはWindowsディレクトリに解決されます。以前は定義されていません。
_JAVA_OPTIONS
環境変数を設定できます。たとえばbashでは、これでうまくいきます:
export _JAVA_OPTIONS=-Djava.io.tmpdir=/new/tmp/dir
私はそれを私のbashログインスクリプトに入れ、それはトリックを行うようです。
Picked up _JAVA_OPTIONS:
ます。これは、ビルドプロセスを完全に混乱させます。
JAVA_TOOL_OPTIONS
より移植性があります。
ここで何が起こっているのかを明確にするために:
一時ディレクトリの場所を設定するための推奨される方法は、 "java.io.tmpdir"と呼ばれるシステムプロパティを設定することです。たとえば-Djava.io.tmpdir=/mytempdir
、java
コマンドにオプションを与えることによってです。プロパティは、System.setProperty("java.io.tmpdir", "/mytempdir)
... moduloサンドボックスのセキュリティ問題を呼び出すことにより、プログラム内から変更することもできます。
起動時に「java.io.tmpdir」プロパティを明示的に設定しない場合、JVMはそれをプラットフォーム固有のデフォルト値に初期化します。Windowsの場合、デフォルトはWin32 APIメソッドの呼び出しによって取得されます。Linux / Solarisの場合、デフォルトは明らかにハードワイヤードです。他のJVMの場合、それは別の可能性があります。
経験的に、「TMP」環境変数はWindows(現在のJVM)で機能しますが、他のプラットフォームでは機能しません。移植性を重視する場合は、システムプロパティを明示的に設定する必要があります。