2016-11-30 14 views
0

Diese Frage auf eine frühere Anfrage bezieht, hier:. Java Runtime.getRuntime().exec() appears to be overwriting $PATHGebäude Go aus Quelle ausfällt Tests bei der Verwendung von Java Runtime.getRuntime run() exec()

Ich versuche Go aus dem Innern einer Java von der Quelle zu bauen Programm. Ich kann es richtig mit Terminal bauen, aber Java Runtime.getRuntime(). Exec() bekommt interessante Ergebnisse. Ich habe versucht, ProcessBuilder zu verwenden, konnte es aber nicht richtig machen. Wenn ich mein aktuelles Setup mit exec() benutze, macht es richtig, scheitert dann aber an zwei Tests. Code-Schnipsel:

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"); 

Es läuft richtig und kompiliert richtig, aber wenn es die Testsuite zum Laufen bekommt, bekomme ich zwei Fehler:

--- 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 

und eine viel längere, die ich nicht einfügen wird hier aufgrund absurd Länge, aber es kommt darauf an:

panic: test timed out after 3m0s 
... 
FAIL runtime 180.056s 

ich habe keine Ahnung, warum die ehemaligen versagt, aber für die Laufzeit, wenn ich aus dem Terminal zu bauen, heißt es:

ok  runtime 19.096s 

So etwas verursacht, dass absurde Mengen an Zeit zu nehmen. Ich habe gegoogelt und gehört, dass es behoben werden könnte, wenn ich ARM = 5 als Umgebungsvariable verwende, aber das hat nichts geändert. Hat jemand eine Idee, warum diese Tests fehlschlagen, wenn ich von Java im Gegensatz zum Terminal baue?

+0

Sie könnten immer versuchen, 'make.bash' nur auszuführen, wenn die Tests nicht besonders wichtig für Sie sind. – captncraig

+0

Damit 'User.Current()' funktioniert, müssen Sie cgo aktivieren, das Sie mit 'CGO_ENABLED = 0' deaktiviert haben. Siehe Problem [hier] (https://github.com/golang/go/issues/6376#issuecomment-66085388). –

+0

@ ivan.sim tut es streng genommen "nicht arbeiten". Es geht nur zu einer [Fallback] (https://github.com/golang/go/blob/964639cc338db650ccadeafb7424bc8ebb2c0f6c/src/os/user/lookup_stubs.go#L22) Implementierung, die einigen env vars vertraut. – captncraig

Antwort

0

Betrachtet man den Quellcode für das os/user-Paket, sieht es so aus, als ob die native user handling davon abhängt, dass cgo aktiviert ist. Wenn cgo = 0 (Ihr Fall), wird auf die Umgebungsvariablen USER und HOME zurückgegriffen.

source code in question

Versuchen USER=whatever in Ihrer exec Umgebung setzen.

Ich fürchte, ich würde mehr Informationen benötigen, um das Laufzeitproblem zu diagnostizieren.

+0

Ich habe versucht, die Umgebungsvariable "envp [4] =" USER = was auch immer ";" aber ich habe den gleichen Fehler, also habe ich versucht "envp [4] =" USER = ";" und "envp [4] =" HOME =/Benutzer/ ";" (getrennt), aber jedes Mal den gleichen Fehler. Mache ich hier etwas falsch? – user1914745

+0

Wenn Sie den vollen Laufzeitfehler wollen, ist es bei http://pastebin.com/5XnGzysq – user1914745

+0

@ user1914745 sieht aus wie Sie HOME auch auf etwas Wert festlegen müssen. Es tut uns leid. – captncraig

Verwandte Themen