You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

Windows CMD执行Maven命令可正常获取输出,但GitHub Actions中PowerShell执行相同命令失败

Windows CMD执行Maven命令可正常获取输出,但GitHub Actions中PowerShell执行相同命令失败

看起来你在本地Windows CMD里跑这条Maven命令完全没问题,能顺利拿到super-portal的输出,但放到GitHub Actions的PowerShell步骤里就卡壳了对吧?先帮你理清楚问题出在哪,再给你调整后的可行方案。

先回顾下你本地CMD能正常跑的命令:

D:\Git-Runners\apache-maven-3.8.1\bin\mvn -f "D:\Git-Runners\myrepo\pom.xml" help:evaluate -Dexpression=project.artifactId -q -DforceStdout

输出确实是super-portal,这说明命令本身逻辑是对的,问题出在PowerShell里的命令拼接和执行方式上。

你当前的PowerShell脚本里把命令拼成字符串再执行的写法,很容易因为引号转义的问题导致解析错误,给你调整成PowerShell里更稳妥的标准写法:

PRE_RELEASE:
  runs-on: "selfhosted-windows"

  steps:

    - name: Release to DEV
      shell: powershell
      run: |
        $newmvnhome = "D:\Git-Runners\apache-maven-3.8.1"
        $repopath = "D:\Git-Runners\myrepo"
        # 直接调用mvn命令,避免字符串拼接的引号转义坑
        $ARTIFACTID = & "$newmvnhome\bin\mvn" -f "$repopath\pom.xml" help:evaluate -Dexpression=project.artifactId -q -DforceStdout
        # 输出结果验证
        Write-Output "获取到的Artifact ID是: $ARTIFACTID"

为什么这么改更靠谱?

  • PowerShell里用&调用外部可执行文件是标准操作,能避开字符串拼接时的引号解析混乱
  • 直接拆分传递参数,PowerShell会自动处理路径中的空格,不需要额外手动转义引号
  • 命令的输出可以直接赋值给变量,后续你能直接用这个变量做其他操作

要是你实在想保留字符串拼接的方式(不推荐,容易踩坑),得把转义写对,比如:

$ARTIFACTCMD = "$newmvnhome\bin\mvn -f `"$repopath\pom.xml`" help:evaluate -Dexpression=project.artifactId -q -DforceStdout"
# 用Invoke-Expression执行拼接后的命令
$ARTIFACTID = Invoke-Expression $ARTIFACTCMD

但还是建议用第一种直接调用的方式,稳定性和可维护性都更高。

你试试调整后的脚本,应该就能像本地CMD一样拿到正确的输出了。

备注:内容来源于stack exchange,提问作者Ashar

火山引擎 最新活动