Действия GitHub с Android выдают совместимость с Java 17, и потребителю нужен компонент, совместимый с Java 11

Я могу запустить lintDebug или тестовые примеры на своем локальном терминале студии Android, сборки проходят успешно. В настоящее время я изучаю CI/CD и пытаюсь запустить Github Actions, чтобы выполнить задание, когда я отправляю свой код. Но при нажатии CI терпит неудачу при первом задании со следующим исключением:

> Could not resolve all files for configuration ':classpath'.
   > Could not resolve androidx.navigation:navigation-safe-args-gradle-plugin:2.7.7.
     Required by:
         project : > androidx.navigation.safeargs:androidx.navigation.safeargs.gradle.plugin:2.7.7
      > No matching variant of androidx.navigation:navigation-safe-args-gradle-plugin:2.7.7 was found. The consumer was configured to find a library for use during runtime, compatible with Java 11, packaged as a jar, and its dependencies declared externally, as well as attribute 'org.gradle.plugin.api-version' with value '8.4' but:
          - Variant 'apiElements' capability androidx.navigation:navigation-safe-args-gradle-plugin:2.7.7 declares a library, packaged as a jar, and its dependencies declared externally:
              - Incompatible because this component declares a component for use during compile-time, compatible with Java 17 and the consumer needed a component for use during runtime, compatible with Java 11
              - Other compatible attribute:
                  - Doesn't say anything about org.gradle.plugin.api-version (required '8.4')
          - Variant 'runtimeElements' capability androidx.navigation:navigation-safe-args-gradle-plugin:2.7.7 declares a library for use during runtime, packaged as a jar, and its dependencies declared externally:
              - Incompatible because this component declares a component, compatible with Java 17 and the consumer needed a component, compatible with Java 11
              - Other compatible attribute:
                  - Doesn't say anything about org.gradle.plugin.api-version (required '8.4')
          - Variant 'sourcesElements' capability androidx.navigation:navigation-safe-args-gradle-plugin:2.7.7 declares a component for use during runtime, and its dependencies declared externally:
              - Incompatible because this component declares documentation and the consumer needed a library
              - Other compatible attributes:
                  - Doesn't say anything about its target Java version (required compatibility with Java 11)
                  - Doesn't say anything about its elements (required them packaged as a jar)
                  - Doesn't say anything about org.gradle.plugin.api-version (required '8.4')

Как я понимаю из ошибки, бегун GitHub использует Java 11, а мой код использует Java 17. Поэтому в моем CI я добавил версию Java и распространение под каждым ключевым словом Uses, чтобы решить эту проблему. Я также пытался запустить с самостоятельным хостингом, тоже не получилось. Вот моя начальная часть кода CI, которая генерирует ошибку:

name: CI

on:
  push:
    branches: [master]

  pull_request:
    branches: [master]

jobs:
  start:
    runs-on: ubuntu-latest
    steps:
      - name: Checkout the code
        uses: actions/checkout@v4
        with:
          distribution: 'temurin'
          java-version: '17'
          overwrite-settings: false
  
      - name: Run sample script
        run: echo Hello, world

  lint:
    name: Perform lint check
    needs: [start]
    runs-on: ubuntu-latest
    steps:
      - name: Checkout the code
        uses: actions/checkout@v4
        with:
          distribution: 'temurin'
          java-version: '17'
          overwrite-settings: false

      - name: Cache Gradle
        uses: actions/cache@v4
        with:
          distribution: 'temurin'
          java-version: '17'
          overwrite-settings: false
          path: ~/.gradle/caches
          key: ${{ runner.os }}-gradle-${{ hashFiles('**/*.gradle') }}
          restore-keys: ${{ runner.os }}-gradle-

      - name: Make Gradle executable
        run: chmod +x ./gradlew
  
      - name: Run lint
        run: ./gradlew lintDebug
  
      - name: Upload html test report
        uses: actions/upload-artifact@v4
        with:
          distribution: 'temurin'
          java-version: '17'
          overwrite-settings: false
          name: lint.html
          path: app/build/reports/lint-results-debug.html

  unit-test:
    name: Perform Unit Testing
    needs: [lint]
    runs-on: ubuntu-latest
    steps:
      - name: Checkout the code
        uses: actions/checkout@v4
        with:
          distribution: 'temurin'
          java-version: '17'
          overwrite-settings: false
  
      - name: Run tests
        run: ./gradlew test
  
      - name: Upload test report
        uses: actions/upload-artifact@v4
        with:
          distribution: 'temurin'
          java-version: '17'
          overwrite-settings: false
          name: unit_test_report
          path: app/build/reports/test/testDebugUnitTest/

Когда я искал похожие проблемы, я предлагал поместить соответствующий плагин id("androidx.navigation.safeargs.kotlin") в конец разделов плагинов и проверить наличие JavaVersion.VERSION_17 compileOptions в build.gradle. Сделано это, но все еще не могу устранить ошибку. Любая помощь или идеи будут оценены по достоинству. Заранее спасибо.

1
0
346
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Через некоторое время я обнаружил, что ошибка SafeArgs не возникает. Потому что, когда я полностью удаляю Safeargs из своего проекта и использую Bundle, на этот раз следующий плагин, который я объявил в build.gradle, ниже Safears com.android.application, выдает ту же ошибку.

Я думал, что запускаю свой CI, используя JavaVersion.VERSION_17, а приведенный ниже код, по-видимому, не отменяет Java-версию github runner:

with:
  distribution: 'temurin'
  java-version: '17'

В документации я обнаружил, что могу установить свою собственную версию Java в Github runner, поэтому в каждом задании я добавлял строки с run. С помощью этого я создал ту же среду, что и моя локальная машина с Ubuntu, и там она тоже работала как часы. Приведенный ниже код является лишь частью моего CI, но его достаточно, чтобы вы могли увидеть, как изменить машину-раннер Github по умолчанию. Надеюсь, это поможет.

lint:
  name: Perform lint check
  needs: [start]
  runs-on: ubuntu-latest
  steps:
    - name: Checkout the code
      uses: actions/checkout@v4
      with:
        fetch-depth: 0

    - name: Cache Gradle
      uses: actions/cache@v4
      with:
        path: ~/.gradle/caches
        key: ${{ runner.os }}-gradle-${{ hashFiles('**/*.gradle') }}
        restore-keys: ${{ runner.os }}-gradle-

    - run: |
        download_url = "https://download.oracle.com/java/17/latest/jdk-17_linux-x64_bin.tar.gz"
          wget -O $RUNNER_TEMP/java_package.tar.gz $download_url
    - uses: actions/setup-java@v4
      with:
        distribution: 'jdkfile'
        jdkFile: ${{ runner.temp }}/java_package.tar.gz
        java-version: '17'
        architecture: x64

    - name: Make Gradle executable
      run: chmod +x ./gradlew

    - name: Run lint
      run: ./gradlew lintDebug

    - name: Upload html test report
      uses: actions/upload-artifact@v4
      with:
        name: lint.html
        path: app/build/reports/lint-results-debug.html

Другие вопросы по теме