이 질문은 이전 질문과 관련이 있습니다. Java Runtime.getRuntime (). exec ()가 $ PATH를 덮어 쓰는 것 같습니다.
Java 프로그램 내부에서 소스에서 Go를 빌드하려고합니다. 터미널을 사용하여 제대로 빌드 할 수 있지만 Java의 Runtime.getRuntime (). exec ()는 흥미로운 결과를 얻습니다. ProcessBuilder를 사용해 보았지만 Go를 제대로 만들지 못했습니다. exec ()와 함께 현재 설정을 사용하면 제대로 생성되지만 두 가지 테스트에 실패합니다. 코드 조각 :
String[] envp = new String[4];
envp[0] = "CC=/usr/bin/clang";
envp[1] = "GOROOT_BOOTSTRAP=/usr/local/go";
envp[2] = "CGO_ENABLED=0";
envp[3] = "PATH=" + System.getenv().get("PATH");
Runtime.getRuntime().exec("./all.bash", envp, "$HOME/Desktop/go/src");
제대로 실행되고 제대로 컴파일되지만 테스트 스위트를 실행하면 두 가지 오류가 발생합니다.
--- FAIL: TestCurrent (0.00s)
user_test.go:24: Current: user: Current not implemented on darwin/amd64 (got &user.User{Uid:"502", Gid:"20", Username:"", Name:"", HomeDir:""})
FAIL
FAIL os/user 0.009s
그리고 터무니없는 길이로 인해 여기에 붙여 넣지 않을 훨씬 더 긴 것은 다음과 같습니다.
panic: test timed out after 3m0s
...
FAIL runtime 180.056s
전자가 왜 실패하는지 전혀 모르겠지만 터미널에서 빌드 할 때 런타임에 대해 다음과 같이 말합니다.
ok runtime 19.096s
그래서 뭔가 터무니없는 시간이 걸리고 있습니다. 인터넷 검색을 한 결과 ARM = 5를 환경 변수로 사용하면 수정 될 수 있다고 들었지만 아무것도 변경하지 않았습니다. 터미널이 아닌 Java에서 빌드 할 때 이러한 테스트가 실패하는 이유를 아는 사람이 있습니까?
os/user
패키지 의 소스 코드를 살펴보면 네이티브 사용자 처리 가 cgo 활성화 여부에 따라 달라지는 것처럼 보입니다 . cgo = 0 (귀하의 경우)이면 USER
및 HOME
환경 변수로 대체됩니다.
USER=whatever
exec 환경에 넣어보십시오 .
런타임 문제를 진단하려면 더 많은 정보가 필요합니다.
이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.
침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제
몇 마디 만하겠습니다