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?
Sie könnten immer versuchen, 'make.bash' nur auszuführen, wenn die Tests nicht besonders wichtig für Sie sind. – captncraig
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). –
@ 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