TMP
환경 변수를 사용하여 gcc가 임시 파일을 작성하는 위치와 같은 것을 제어했지만 Java의 createTempFile API에 해당하는 것을 찾을 수없는 것 같습니다 .
그러한 환경 변수가 존재합니까?
TMP
환경 변수를 사용하여 gcc가 임시 파일을 작성하는 위치와 같은 것을 제어했지만 Java의 createTempFile API에 해당하는 것을 찾을 수없는 것 같습니다 .
그러한 환경 변수가 존재합니까?
답변:
흠-이것은 JVM에서 처리하기 때문에 OpenJDK가 수행 한 작업이 Java 6 및 이전 버전에서 수행 된 작업을 모방 할 수 있다고 생각하면서 OpenJDK VM 소스 코드를 조금 탐구했습니다. Windows 이외의 다른 방법이 있다는 것은 안심할 수 없습니다.
에 윈도우 , 오픈 JDK의 get_temp_directory()
함수는 Win32 API를 호출에한다 GetTempPath()
; 이것은 Windows에서 Java가 TMP
환경 변수 의 값을 반영하는 방법입니다 .
에 리눅스 와 솔라리스 , 같은 get_temp_directory()
기능의 정적 값을 반환합니다 /tmp/
.
실제 JDK6이 이러한 정확한 규칙을 따르는지는 모르겠지만 나열된 각 플랫폼의 동작에 따라 그렇게하는 것처럼 보입니다.
-Djava.io.tmpdir
JVM에 대한 명령 줄 옵션을 통해) 속성의 기본값이 설정되는 방법 과 해당 기본값이 영향을 받는지 찾고 있었습니다. 모두 환경 가치에 의해. 사람들이 관찰했듯이, 윈도우에이 됩니다 에 의해 영향을받는 TMP
환경 변수하지만, 다른 운영체제에 대한 알 수없는 변수가 있다면 그것은 분명했다. 적어도 우리가 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
(리눅스)
자바 문서 에 따르면java.io.File
기본 임시 파일 디렉토리는 시스템 특성 java.io.tmpdir로 지정됩니다. UNIX 시스템에서이 등록 정보의 기본값은 일반적으로 "/ tmp"또는 "/ var / tmp"입니다. Microsoft Windows 시스템에서는 일반적으로 "c : \ temp"입니다. JVM (Java Virtual Machine)이 호출 될 때이 시스템 특성에 다른 값이 제공 될 수 있지만이 특성에 대한 프로그램 변경 사항이이 메소드에서 사용하는 임시 디렉토리에 영향을 미친다는 보장은 없습니다.
java.io.tmpdir
시스템 속성 을 지정하려면 다음과 같이 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 또는 각 이전은 정의되지 않았습니다.
_JAVA_OPTIONS
환경 변수를 설정할 수 있습니다. 예를 들어 bash에서 이것은 트릭을 수행합니다.
export _JAVA_OPTIONS=-Djava.io.tmpdir=/new/tmp/dir
나는 그것을 내 bash 로그인 스크립트에 넣었고 트릭을 수행하는 것 같습니다.
Picked up _JAVA_OPTIONS:
이 있습니다 . 이는 빌드 프로세스를 완전히 혼란스럽게합니다.
JAVA_TOOL_OPTIONS
더 이식성이 있습니다.
여기에서 무슨 일이 일어나고 있는지 명확히하려면 :
임시 디렉토리 위치를 설정하는 권장 방법은 예를 들어 명령에 옵션 -Djava.io.tmpdir=/mytempdir
을 제공하여 "java.io.tmpdir"이라는 시스템 속성을 설정하는 것 java
입니다. System.setProperty("java.io.tmpdir", "/mytempdir)
... 모듈로 샌드 박스 보안 문제를 호출하여 프로그램 내에서 속성을 변경할 수도 있습니다 .
시작시 "java.io.tmpdir"속성을 명시 적으로 설정하지 않으면 JVM은이를 플랫폼 별 기본값으로 초기화합니다 . Windows의 경우 기본값은 Win32 API 메서드를 호출하여 얻습니다. Linux / Solaris의 경우 기본값은 분명히 유선입니다. 다른 JVM의 경우 다른 것이 될 수 있습니다.
경험적으로 "TMP"환경 변수는 Windows (현재 JVM 사용)에서 작동하지만 다른 플랫폼에서는 작동하지 않습니다. 이식성에 관심이 있다면 명시 적으로 시스템 속성을 설정해야합니다.