Gradle: отсутствует вывод из команды оболочки - PullRequest
1 голос
/ 18 февраля 2020

Я пытаюсь использовать ld из скрипта сборки gradle, чтобы получить полный путь к библиотекам в MacOS. Я пытаюсь получить эквивалент следующей команды, запущенной в моей оболочке вручную:

$ ld -lboost_program_options -dylib -arch x86_64 -t
ld: warning: platform not specified
ld: warning: No platform min-version specified on command line
/usr/local/lib/libboost_program_options.dylib

Как видно из вышесказанного, команда выдает 2 предупреждения на stderr и полный путь к библиотеке на stdout. И код возврата равен нулю. Однако когда я устанавливаю ту же команду в gradle, команда выполняется успешно, и вывод stderr перехватывается правильно, однако stdout кажется пустым.

Соответствующая часть сценария build.gradle:

    def sout = new ByteArrayOutputStream()
    def serr = new ByteArrayOutputStream()
    exec {
        commandLine "ld"
        args "-lboost_program_options", "-dylib", "-arch", "x86_64", "-t"
        errorOutput = serr
        standardOutput = sout
    }

    logger.debug("Out: '" + sout.toString() + "'")
    logger.debug("Err: '" + serr.toString() + "'")

Соответствующая часть выходного сигнала gradle с включенной отладкой выглядит следующим образом:

14:53:20.351 [INFO] [org.gradle.process.internal.DefaultExecHandle] Starting process 'command 'ld''. Working directory: /Users/kpenev/projects/git/SuperPhot Command: ld -lboost_program_options -dylib -arch x86_64 -t
14:53:20.352 [DEBUG] [org.gradle.process.internal.DefaultExecHandle] Environment for process 'command 'ld'': {PATH=/Users/kpenev/anaconda3/bin:/Users/kpenev/anaconda3/condabin:/usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin:/Library/TeX/texb
in:/opt/X11/bin:/Users/kpenev/anaconda3/bin, JAVA_ARCH=x86_64, LC_TERMINAL=iTerm2, CONDA_DEFAULT_ENV=base, CONDA_EXE=/Users/kpenev/anaconda3/bin/conda, TERM=xterm-color, CONDA_PYTHON_EXE=/Users/kpenev/anaconda3/bin/python, LANG=en_US.UTF-
8, CONDA_PREFIX=/Users/kpenev/anaconda3, DISPLAY=/private/tmp/com.apple.launchd.Fm0FJEKcMY/org.macosforge.xquartz:0, JAVA_MAIN_CLASS_74054=org.gradle.wrapper.GradleWrapperMain, ITERM_SESSION_ID=w0t2p0:DDBFD539-247F-4B0D-946E-9BEAB74DA24E,
 _CE_M=, COLORTERM=truecolor, APP_ICON_74054=/Users/kpenev/projects/git/SuperPhot/media/gradle.icns, LOGNAME=kpenev, TERM_PROGRAM_VERSION=3.3.7, PWD=/Users/kpenev/projects/git/SuperPhot, XPC_SERVICE_NAME=0, CONDA_SHLVL=1, PYTHONPATH=:/Use
rs/kpenev/projects/git/poet/PythonPackage:/Users/kpenev/projects/git/general_purpose_python_modules:/Users/kpenev/projects/git/SuperPhot/PythonPackage/:/Users/kpenev/projects/git/PhotometryPipeline, SHELL=/bin/bash, LC_TERMINAL_VERSION=3.
3.7, TERM_PROGRAM=iTerm.app, SQLITE_EXEMPT_PATH_FROM_VNODE_GUARDS=/Users/kpenev/Library/WebKit/Databases, OLDPWD=/Users/kpenev/projects/git/SuperPhot, CLICOLOR=1, USER=kpenev, VISUAL=vim, TMPDIR=/var/folders/xq/l5s9qnd10kd4m37x4dcjc3fr000
0gn/T/, ITERM_PROFILE=Default, LIBRARY_PATH=:/usr/local/gfortran/lib, SSH_AUTH_SOCK=/private/tmp/com.apple.launchd.zuHkV3WzFC/Listeners, _CE_CONDA=, PYTHONUNBUFFERED=1, XPC_FLAGS=0x0, TERM_SESSION_ID=w0t2p0:DDBFD539-247F-4B0D-946E-9BEAB74
DA24E, APP_NAME_74054=Gradle, __CF_USER_TEXT_ENCODING=0x1F5:0x0:0x0, Apple_PubSub_Socket_Render=/private/tmp/com.apple.launchd.RrVbuY9yXD/Render, CONDA_PROMPT_MODIFIER=(base) , com.apple.java.jvmTask=CommandLine, COLORFGBG=7;0, HOME=/User
s/kpenev, SHLVL=1}
14:53:20.352 [DEBUG] [org.gradle.process.internal.DefaultExecHandle] Changing state to: STARTING
14:53:20.352 [DEBUG] [org.gradle.process.internal.DefaultExecHandle] Waiting until process started: command 'ld'.
14:53:20.356 [DEBUG] [org.gradle.process.internal.DefaultExecHandle] Changing state to: STARTED
14:53:20.356 [DEBUG] [org.gradle.process.internal.ExecHandleRunner] waiting until streams are handled...
14:53:20.356 [INFO] [org.gradle.process.internal.DefaultExecHandle] Successfully started process 'command 'ld''
14:53:20.374 [DEBUG] [org.gradle.process.internal.DefaultExecHandle] Changing state to: SUCCEEDED
14:53:20.374 [DEBUG] [org.gradle.process.internal.DefaultExecHandle] Process 'command 'ld'' finished with exit value 0 (state: SUCCEEDED)
14:53:20.374 [DEBUG] [org.gradle.api.Project] Out: ''
14:53:20.375 [DEBUG] [org.gradle.api.Project] Err: 'ld: warning: platform not specified
ld: warning: No platform min-version specified on command line
'

Я вижу из журнала, что правильная команда выполнилась, что она завершилась с нулевым кодом возврата, указывая успех и то, что предупреждающие сообщения на stderr правильно перехвачены, но загадочным образом stdout кажется пустым, даже если бы я вручную запускал ту же команду, stdout содержал /usr/local/lib/libboost_program_options.dylib.

Я был бы признателен за помощь в том, как получить это сообщить правильный путь к библиотеке.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...