【问题标题】:Getting Maven Project version within Github Actions在 Github Actions 中获取 Maven 项目版本
【发布时间】:2023-03-30 00:32:01
【问题描述】:

我正在尝试获取我的 maven 项目的版本作为部署过程的一部分,但我似乎在命令的输出中遇到了错误。有什么想法吗?

我的 pom.xml 插件中有 Maven 帮助。

这是我正在运行的步骤:

 - name: Get version
        run: |
          VERSION=$( mvn help:evaluate -Dexpression=project.version -q -DforceStdout )
          echo "::set-output name=version::$VERSION"
        id: get_version

这是输出(注意:我在这里删除了 -q 以便我可以看到输出)。请注意,默认的项目是我正在寻找的。我正在尝试将 v0.1 作为我的输出!

[INFO] No artifact parameter specified, using 'com.xyz:abc-123:war:v0.1' as project.
[INFO] 
null object or invalid expression
[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESS
[INFO] ------------------------------------------------------------------------
[INFO] Total time:  13.569 s
[INFO] Finished at: 2020-08-29T13:52:22Z
[INFO] ------------------------------------------------------------------------

我正在使用帮助 3.2.0

            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-help-plugin</artifactId>
                <version>3.2.0</version>
            </plugin>

【问题讨论】:

  • 您配置使用哪个版本的 maven-help-plugin?除此之外,为什么要使用v1.0 而不是1.0 这么奇怪的版本?
  • 也许尝试使用类似这样的东西而不是插件的*.com/a/26514030
  • Ed -- 您的第一个链接最终与我最初拥有的命令一样有效。最终归结为脚本中的错误排序。

标签: maven github-actions


【解决方案1】:

原来问题不在于命令,而在于我的命令。我最初并没有在第一条评论中粘贴这个,但我有一个步骤需要手动安装 jars(是的,这些应该在某个时候发布到某种内部包管理器......)。

一旦我将手动库步骤放在版本步骤之前,一切都会顺利执行。

      - name: Install manual libraries
        run: |
          mvn install:install-file -Dfile=lib/xyz.jar -DgroupId=com.xyz-DartifactId=xyz -Dversion=8.3.0 -Dpackaging=jar

      - name: Get version
        run: |
          VERSION=$( mvn help:evaluate -Dexpression=project.version -q -DforceStdout )
          echo "::set-output name=version::$VERSION"
        id: get_version

【讨论】:

    【解决方案2】:

    还有这种方法使用mvn exec 目标和set-output variable definition

      - name: Extract Maven project version
        run: echo ::set-output name=version::$(mvn -q -Dexec.executable=echo -Dexec.args='${project.version}' --non-recursive exec:exec)
        id: project
    
      - name: Show extracted Maven project version
        run: echo ${{ steps.project.outputs.version }}
    

    【讨论】:

      【解决方案3】:

      如果您只需要在工作的后续步骤中使用该版本,那么您可以在GITHUB_ENV 上将其设置为environment variable,并通过${{ env.var_name }} 访问它。例如:

        - name: Set Release version env variable
          run: |
            echo "RELEASE_VERSION=$(mvn help:evaluate -Dexpression=project.version -q -DforceStdout)" >> $GITHUB_ENV
      
        - name: Create Release
          id: create_release
          uses: actions/create-release@v1
          env:
            GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
          with:
            tag_name: ${{ env.RELEASE_VERSION }}
            release_name: Release ${{ env.RELEASE_VERSION }}
            draft: false
            prerelease: false
      

      【讨论】: