首页 > 解决方案 > 为什么 github 操作 CI 不使用相同的 jdk 编译?

问题描述

我有在 JDK 13.0.1 上成功构建的 Scala 代码。

s.getValue().stripTrailing()  // s.getValue() returns String

当此代码由 github 操作构建时,我收到此错误:

Error:  -- [E008] Not Found Error: /github/workspace/core/src/main/scala/co.blocke.scalajack/yaml/YamlParser.scala:45:96 
Error:  45 |          case "|" | ">"                           => s.getValue().stripTrailing()
Error:     |                                                      ^^^^^^^^^^^^^^^^^^^^^^^^^^
Error:     |                           value stripTrailing is not a member of String

我的行动文件是:

name: Package Build
# This workflow is triggered on pushes to the repository.
on: 
  push:
    branches-ignore:
      - "feature/*"  # don't run build/test against a feature branch -- no SLA there
      - "master"

jobs:
  build:
    name: Build
    runs-on: ubuntu-latest

    steps:
      - name: Checkout repo
        uses: actions/checkout@v2
      - name: Set up JDK 13
        uses: actions/setup-java@v1
        with:
          java-version: '13.0.1'
      - name: Test
        id: sbt
        uses: lokkju/github-action-sbt@master
        with:
          commands: test

stripTrailing() 是 Oracle 和 OpenJDK 13.x 库中的 String 方法。

标签: javagithub-actions

解决方案


该操作github-action-sbt在内部使用 Docker 容器(source)。您的步骤Set up JDK 13仅适用于直接在运行器上运行的东西,但不会影响容器。

解决方案

指定格式的标签{JAVA_VERSION}-{SBT_VERSION}-{SCALA_VERSION}。有关可用版本,请参见下文。

      - name: Test
        id: sbt
        uses: lokkju/github-action-sbt@14-1.3.0-2.10.7
        with:
          commands: test

该标记控制用于初始化图像的 Java、SBT 和 Scala 的版本。SBT 和 Scala 将自动下载项目设置中指定的其他版本,但如果它们与初始化版本不匹配,则可能需要大量额外的构建时间。

标签格式为{JAVA_VERSION}-{SBT_VERSION}-{SCALA_VERSION}目前支持的标签有:

JAVA_VERSIONS=("8" "11" "14")
SBT_VERSIONS=("0.13.17" "1.1.6" "1.2.8" "1.3.0")
SCALA_VERSIONS=("2.13.0" "2.12.10" "2.11.12" "2.10.7")

创建此帖子时的来源

来源@master


推荐阅读