GitHub Actions缓存Java17后版本显示为1.8的问题求助
问题根源
你手动缓存了JDK的安装目录,但忽略了actions/setup-java的核心作用——它不仅会安装JDK,还会自动配置JAVA_HOME环境变量,并将JDK的bin目录加入PATH。第二次流水线命中缓存时,你跳过了setup-java步骤,系统默认的Java 1.8环境变量没有被覆盖,所以虽然缓存里的Java 17存在,但系统找不到它,依然用的是1.8。
最优解决方案:用
setup-java自带的缓存功能 从actions/setup-java@v3开始,官方已经内置了缓存支持,不需要手动用actions/cache实现,它会自动处理缓存和环境变量配置,避免手动缓存的问题。修改后的流水线配置如下:
name: pipeline to install & cache java on: push: branches: - do/cs # 你的分支名 workflow_dispatch: jobs: build: name: Install packages runs-on: windows-2019 steps: - name: Setup Java 17 with cache uses: actions/setup-java@v3 with: distribution: 'microsoft' java-version: '17' architecture: 'x64' cache: 'maven' # 根据你的构建工具选择maven/gradle/sbt,即使无构建工具,填任意值即可触发JDK缓存 - name: Verify Java installation run: | echo "java version:" java -version
手动缓存的修复方案(不推荐,仅作参考)
如果坚持手动缓存,需要在恢复缓存后手动配置环境变量,让系统识别到缓存的Java 17:
name: pipeline to install & cache java on: push: branches: - do/cs workflow_dispatch: jobs: build: name: Install packages runs-on: windows-2019 steps: - name: Cache Java id: cache-java uses: actions/cache@v3 with: path: 'c:\hostedtoolcache\windows\Java_Microsoft_jdk\17.0.3\x64' key: ${{ runner.os }}-jdk-17.0.3 restore-keys: ${{ runner.os }}-jdk-17.0.3 - name: Install Java if: ${{ steps.cache-java.outputs.cache-hit != 'true' }} uses: actions/setup-java@v3 with: distribution: 'microsoft' java-version: '17' architecture: 'x64' - name: Configure Java environment (after cache restore) if: ${{ steps.cache-java.outputs.cache-hit == 'true' }} run: | # 设置JAVA_HOME为缓存的JDK路径 echo "JAVA_HOME=c:\hostedtoolcache\windows\Java_Microsoft_jdk\17.0.3\x64" >> $env:GITHUB_ENV # 将JDK的bin目录加入PATH最前面,确保优先使用 echo "c:\hostedtoolcache\windows\Java_Microsoft_jdk\17.0.3\x64\bin" >> $env:GITHUB_PATH - name: Verify Java installation run: | echo "java version:" java -version
补充说明
- 推荐使用官方
setup-java的缓存功能,它会自动处理JDK版本匹配、环境变量配置,避免手动缓存路径硬编码的问题(比如你写的17.0.3版本号,若微软后续更新JDK版本,路径会变更导致缓存失效)。 - 手动缓存方式灵活性差,容易因版本更新出现路径不匹配的问题。
内容的提问来源于stack exchange,提问作者muhammad adil
相关产品推荐
相关产品推荐

