You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

GitHub Actions提取Maven版本报错:Unknown lifecycle phase

解决Maven提取项目版本时的生命周期阶段错误

问题诊断

你遇到的错误是因为Shell解析命令时的引号处理问题,导致-Dexec.executable='echo'被错误拆分,Maven将.executable=echo识别为无效的生命周期阶段。

解决方案

以下三种方法均可可靠提取pom.xml中的项目版本,适配GitHub Actions场景:

方法1:修正exec插件命令

调整参数顺序并优化引号使用,避免Shell拆分参数:

echo "VERSION=$(./mvnw -q --non-recursive exec:exec -Dexec.executable=echo -Dexec.args='${project.version}')" >> $GITHUB_OUTPUT

关键调整:将--non-recursive移至exec:exec之前,同时移除-Dexec.executable值的单引号,确保Maven正确解析参数。

方法2:使用Maven Help插件(推荐)

Help插件的evaluate目标专为提取项目属性设计,稳定性更强:

echo "VERSION=$(./mvnw -q --non-recursive help:evaluate -Dexpression=project.version -DforceStdout)" >> $GITHUB_OUTPUT

优势:不受Shell引号解析影响,-DforceStdout直接输出结果,无需额外处理。

方法3:直接解析pom.xml(无需Maven)

利用Ubuntu runner默认自带的xmllint直接读取XML节点,速度更快:

echo "VERSION=$(xmllint --xpath '/*[local-name()="project"]/*[local-name()="version"]/text()' pom.xml)" >> $GITHUB_OUTPUT

优势:不依赖Maven环境,避免插件相关的配置问题。

完整GitHub Actions步骤示例

替换原Extract project version步骤(以方法2为例):

- name: Extract project version
  id: extract_version
  run: |
    cd examsoft
    echo "VERSION=$(./mvnw -q --non-recursive help:evaluate -Dexpression=project.version -DforceStdout)" >> $GITHUB_OUTPUT

使用提取的版本

后续步骤中可通过${{ steps.extract_version.outputs.VERSION }}引用版本号,例如用于Docker镜像标签:

- name: Build Docker image
  run: docker build -t examsoft:${{ steps.extract_version.outputs.VERSION }} .

内容的提问来源于stack exchange,提问作者ayush

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.25 01:21:04