Для проекта, чтобы автоматизировать некоторое тестирование адекватности мутаций, я пытаюсь сделать GoLang из исходного кода изнутри программы Java. Я был в состоянии сделать это из источника в терминале, и попытался использовать эту команду в Runtime.getRuntime Явы() команда Exec():.
String[] envp = new String[3];
envp[0] = "CC=/usr/bin/clang";
envp[1] = "GOROOT_BOOTSTRAP=/usr/local/go";
envp[2] = "CGO_ENABLED=0";
Runtime.getRuntime().exec("./all.bash", envp, "$HOME/Desktop/go/src");
Эквивалентная команда это прекрасно работает в терминале. Выполнение этого кода в Java (и печать выход) получает следующее:
./all.bash
##### Building Go bootstrap tool.
cmd/dist
go tool dist: FAILED: uname -r: exec: "uname": executable file not found in $PATH
Так что странно, что он не может найти uname. Опять же, если я нахожу «uname» на Терминале, он отлично работает. Таким образом, я нашел каталог uname ('который uname' дает '/ USR/BIN/uname') и множество $ PATH в том, что для этой команды:
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=/usr/bin";
Runtime.getRuntime().exec("./all.bash", envp, "$HOME/Desktop/go/src");
И что вместо этого получает выход:
./all.bash
env: bash: No such file or directory
Поэтому, когда я устанавливаю путь, он не может найти программу в каталоге. Это говорит мне, что когда вызывается Runtime.getRuntime(). Exec(), он перезаписывает $ PATH как каталог, который я передал ему, а затем перезаписывает переменные среды, которые я им дал. Но для того, чтобы ./all.bash работать, мне нужно, чтобы оба пути находились в переменной $ PATH. Как я могу это сделать?
В Mac OS X 10.11.6.
'envp' не переменные, чтобы добавить к окружающей среде, это переменные, чтобы установить среду в. Никакие другие переменные, кроме указанных вами, не будут доступны для процесса. ** Вы ** перезаписываете PATH. –
О, хорошо. Поэтому, если я хочу, чтобы он также мог выполнить ./all.bash в каталоге, который я ему даю, мне нужно добавить этот каталог в $ PATH? Как «PATH =/usr/bin: $ HOME/Desktop/go/src»? Или что-то в этом роде, потому что это приводит к той же ошибке. – user1914745
Наверное, проще всего получить свой путь и передать его через 'System.getenv(). Get (" PATH ")' –