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

标签 java go environment-variables exec

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

我正在尝试从 Java 程序内部的源代码构建 Go。我可以使用终端正确构建它,但 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 而不是终端构建时这些测试会失败?

最佳答案

查看os/user 包的源代码,它看起来像native user handling。取决于启用 cgo。如果 cgo=0(你的情况),它将返回到 USERHOME 环境变量。

source code in question

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

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

关于java - 当使用 Java 的 Runtime.getRuntime().exec() 运行时,从源代码构建 Go 测试失败,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40896293/

相关文章:

go - 分块任何 slice 的辅助函数?

java - CentOS 上的 Artifactory 环境变量

c++ - Qt Creator 修改PATH环境变量

java - 如果输入小写字母,我的十六进制到二进制转换器将为空

import - golang 远程导入失败

pointers - 转到错误 : "embedded type cannot be a pointer to interface"

java - 如何从 Java 设置环境变量?

java - 从 JFrame 关闭 JPanel 窗口 [Java]

java - 将连续字节[]数据发送到Java中的DatagramSocket,DatagramPacket

java - libgdx- 像素图 : can I somehow change the width of the line?