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

Azure DevOps JDK17配置问题:JavaToolInstaller报错与运行环境不兼容

Azure DevOps流水线JDK17配置问题解决方案

问题概述

  • 手动安装JDK17后,后续Bash任务仍默认使用JDK11,运行Spring Boot Jar时触发UnsupportedClassVersionError(类文件版本61.0对应JDK17,当前JDK11仅支持到55.0)
  • 使用JavaToolInstaller安装JDK17时,提示“指定的JDK源文件扩展名不被支持”,版本更新操作无效

Bash任务错误日志

Starting: Bash
==============================================================================
Task         : Bash
Description  : Run a Bash script on macOS, Linux, or Windows
Version      : 3.244.1
Author       : Microsoft Corporation
Help         : https://docs.microsoft.com/azure/devops/pipelines/tasks/utility/bash
==============================================================================
Generating script.
========================== Starting Command Output ===========================
/usr/bin/bash /home/vsts/work/_temp/96124f0c-8298-4b37-815e-c653e4b5db03.sh
openjdk version "11.0.24" 2024-07-16
OpenJDK Runtime Environment Temurin-11.0.24+8 (build 11.0.24+8)
OpenJDK 64-Bit Server VM Temurin-11.0.24+8 (build 11.0.24+8, mixed mode)
Listing files in target directory:
total 32756
drwxr-xr-x 2 vsts docker     4096 Sep  5 12:23 .
drwxr-xr-x 3 vsts docker     4096 Sep  5 12:23 ..
-rw-r--r-- 1 vsts docker 33533344 Sep  5 12:23 ASD-0.0.1-SNAPSHOT.jar
Running the Spring Boot application...
Error: LinkageError occurred while loading main class org.springframework.boot.loader.launch.JarLauncher
    java.lang.UnsupportedClassVersionError: org/springframework/boot/loader/launch/JarLauncher has been compiled by a more recent version of the Java Runtime (class file version 61.0), this version of the Java Runtime only recognizes class file versions up to 55.0

##[error]Bash exited with code '1'.
Finishing: Bash

JavaToolInstaller错误日志

Starting: JavaToolInstaller
==============================================================================
Task         : Java tool installer
Description  : Acquire a specific version of Java from a user-supplied Azure blob or the tool cache and sets JAVA_HOME
Version      : 0.245.3
Author       : Microsoft Corporation
Help         : https://docs.microsoft.com/azure/devops/pipelines/tasks/tool/java-tool-installer
==============================================================================
Cleaning destination folder before extraction: /home/vsts/work/1/s
Retrieving the JDK from local path.
##[error]Specified JDK source file does not have a supported file extension.
##[error]Specified JDK source file does not have a supported file extension.
Finishing: JavaToolInstaller

解决方案

手动安装JDK17后后续任务不生效的问题

Azure DevOps每个任务都是独立进程,手动安装JDK17后,需在后续任务中显式指定JDK路径或更新环境变量:

  • 直接使用JDK17绝对路径执行命令:
/usr/lib/jvm/java-17-openjdk-amd64/bin/java -version
/usr/lib/jvm/java-17-openjdk-amd64/bin/java -jar $(Build.ArtifactStagingDirectory)/target/ASD-0.0.1-SNAPSHOT.jar
  • 临时更新PATH环境变量:
export PATH=/usr/lib/jvm/java-17-openjdk-amd64/bin:$PATH
java -version
java -jar $(Build.ArtifactStagingDirectory)/target/ASD-0.0.1-SNAPSHOT.jar

更规范的做法是用JavaToolInstaller统一管理JDK版本,避免环境隔离问题。

JavaToolInstaller报错的问题

报错原因是指定的JDK源文件格式不被支持,该任务仅支持.zip、.tar.gz、.tar.bz2等压缩格式JDK包,推荐使用工具缓存安装:

- task: JavaToolInstaller@0
  inputs:
    versionSpec: '17'
    jdkArchitectureOption: 'x64'
    jdkSourceOption: 'PreInstalled'

若需自定义源安装,确保路径指向正确的压缩包文件:

- task: JavaToolInstaller@0
  inputs:
    versionSpec: '17'
    jdkArchitectureOption: 'x64'
    jdkSourceOption: 'AzureStorage'
    azureResourceManagerEndpoint: '<你的ARM服务连接>'
    azureStorageAccountName: '<存储账户名>'
    azureContainerName: '<容器名>'
    azureCommonVirtualFile: '<JDK压缩包路径,如jdk-17.tar.gz>'

修正后的完整流水线YAML

trigger:
  - master

pool:
  vmImage: 'ubuntu-latest'

steps:
  # 使用JavaToolInstaller安装JDK17并配置环境变量
  - task: JavaToolInstaller@0
    inputs:
      versionSpec: '17'
      jdkArchitectureOption: 'x64'
      jdkSourceOption: 'PreInstalled'

  - task: Maven@4
    inputs:
      mavenPomFile: 'pom.xml'
      mavenOptions: '-Xmx1024m'
      javaHomeOption: 'JDKVersion'
      jdkVersionOption: '1.17'
      goals: 'clean package'

  # 复制JAR到 staging 目录
  - task: CopyFiles@2
    inputs:
      contents: '**/target/*.jar'
      targetFolder: '$(Build.ArtifactStagingDirectory)'

  # 发布构建产物
  - task: PublishBuildArtifacts@1
    inputs:
      pathToPublish: '$(Build.ArtifactStagingDirectory)'
      artifactName: 'drop'

  # 运行Spring Boot应用
  - task: Bash@3
    inputs:
      targetType: 'inline'
      script: |
        java -version

        echo "列出target目录文件:"
        ls -al $(Build.ArtifactStagingDirectory)/target

        echo "启动Spring Boot应用..."
        java -jar $(Build.ArtifactStagingDirectory)/target/ASD-0.0.1-SNAPSHOT.jar

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.18 20:24:54