Gradle:Shell命令缺少输出

时间:2020-02-17 21:06:44

标签: macos gradle build.gradle

我正在尝试在gradle构建脚本中使用ld来获取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

从上面可以明显看出,该命令在stderr上产生2条警告,并在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

对于如何获取此信息以报告到库的正确路径,我将不胜感激。

0 个答案:

没有答案
相关问题