この質問は、ここで前の質問に関連している:私はJavaの内部からソースからの移動を構築しようとしていますJava Runtime.getRuntime().exec() appears to be overwriting $PATHビルGoがテストに失敗した)のexec()
プログラム。私はTerminalを使って正しくビルドできますが、JavaのRuntime.getRuntime()。exec()は興味深い結果を得ます。私はProcessBuilderを使ってみましたが、Goを正しく作れませんでした。 exec()で私の現在の設定を使用すると、正常に作成されますが、2つのテストに失敗します。コードスニペット:
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");
それが適切に実行され、正常にコンパイルし、それはテストスイートを実行しているになったとき、私は2つのエラーを取得:
--- 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からビルドすると、なぜこれらのテストが失敗するのか誰にも分かりますか?
テストがあなたにとって非常に重要でない場合は、いつでも 'make.bash'を実行することができます。 – captncraig
'User.Current()'が動作するためには、 'CGO_ENABLED = 0'で無効にしたcgoを有効にする必要があります。問題[こちら](https://github.com/golang/go/issues/6376#issuecomment-66085388)を参照してください。 –
@ ivan.sim厳密に言えば、「うまくいきません」。いくつかの環境を信頼する[fallback](https://github.com/golang/go/blob/964639cc338db650ccadeafb7424bc8ebb2c0f6c/src/os/user/lookup_stubs.go#L22)実装に行くだけです。 – captncraig