這一問題與上一個問題,在這裏:Java Runtime.getRuntime().exec() appears to be overwriting $PATH大廈轉到失敗測試的exec()
我試圖從Java內從源代碼編譯圍棋程序。我可以使用Terminal正確地構建它,但是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
因此,有些事情會造成這種情況需要花費荒謬的時間。我做了一些Google搜索,聽說如果我使用ARM = 5作爲環境變量,它可能會被修復,但這並沒有改變任何東西。有沒有人有任何想法,當我從Java構建而不是終端時,爲什麼這些測試失敗?
如果測試對你來說不是非常重要的話,你總是可以試着運行'make.bash'。 – captncraig
爲了讓'User.Current()'起作用,你需要啓用cgo,你用'CGO_ENABLED = 0'來禁用。看問題[這裏](https://github.com/golang/go/issues/6376#issuecomment-66085388)。 –
@ ivan.sim它嚴格來說不是「不工作」。它只是一個[後備](https://github.com/golang/go/blob/964639cc338db650ccadeafb7424bc8ebb2c0f6c/src/os/user/lookup_stubs.go#L22)實現,相信一些環境變量。 – captncraig