使用Java的Runtime.getRuntime()运行时,从源代码构建Go失败测试.exec()

时间:2016-11-30 19:09:04

标签: java go environment-variables exec

此问题与上一个问题有关,此处为:Java Runtime.getRuntime().exec() appears to be overwriting $PATH

我正在尝试从Java程序内部构建Go。我可以使用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

所以有些事情导致这需要花费大量时间。我做了一些谷歌搜索,并听说如果我使用ARM = 5作为环境变量可能会修复,但这并没有改变任何东西。当我使用Java构建而不是终端时,有没有人知道为什么这些测试失败?

1 个答案:

答案 0 :(得分:0)

查看os/user包的源代码,看起来native user handling依赖于启用了cgo。如果cgo = 0(您的情况),它将回退到USERHOME环境变量。

source code in question

尝试将USER=whatever放入您的exec环境中。

我担心我需要更多信息来诊断运行时问题。