2016-11-30 6 views
0

この質問は、ここで前の質問に関連している:私は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からビルドすると、なぜこれらのテストが失敗するのか誰にも分かりますか?

+0

テストがあなたにとって非常に重要でない場合は、いつでも 'make.bash'を実行することができます。 – captncraig

+0

'User.Current()'が動作するためには、 'CGO_ENABLED = 0'で無効にしたcgoを有効にする必要があります。問題[こちら](https://github.com/golang/go/issues/6376#issuecomment-66085388)を参照してください。 –

+0

@ ivan.sim厳密に言えば、「うまくいきません」。いくつかの環境を信頼する[fallback](https://github.com/golang/go/blob/964639cc338db650ccadeafb7424bc8ebb2c0f6c/src/os/user/lookup_stubs.go#L22)実装に行くだけです。 – captncraig

答えて

0

os/userパッケージのソースコードを見ると、native user handlingはcgoが有効になっているように見えます。 cgo = 0(あなたの場合)の場合は、USERHOMEの環境変数に戻ります。

source code in question

あなたのexec環境でUSER=whateverを入れてみてください。

私はランタイムの問題を診断するために、より多くの情報が必要と思われます。

+0

私は環境変数 "envp [4] =" USER = whatever ";"同じエラーが発生したので、 "envp [4] =" USER = ";と "envp [4] =" HOME =/Users/ ";" (別途)、毎回同じエラーが発生しました。私はここで何か間違っていますか? – user1914745

+0

完全なランタイムエラーが必要な場合は、http://pastebin.com/5XnGzysq – user1914745

+0

@ user1914745にあります。HOMEにも値を設定する必要があるようです。ごめんなさい。 – captncraig

関連する問題