繁体   English   中英

如何在不下载的情况下在 Azure Devops Agent 中使用特定版本的 Java?

[英]How to you use a specific version of Java in Azure Devops Agent without downloading?

我正在尝试使用 Maven 包装器而不是 Maven 任务运行 Maven 。 但是,它失败了,因为它使用的是旧版本的 Java。 JavaInstaller 任务似乎需要 JDK 的远程源,我宁愿避免这样做并使用与 Maven 任务一起使用的源,但我在任何地方都找不到它的文档。

现在还可以使用JavaToolInstaller任务来激活预安装的 Java 版本之一,例如

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

请参阅以下文档: https://docs.microsoft.com/en-us/azure/devops/pipelines/tasks/tool/java-tool-installer?view=azure-devops

它还将设置JAVA_HOME并预先添加PATH ,请参阅来源: https://github.com/microsoft/azure-pipelines-tasks/blob/46cca412451ac4418d6332114fca8ef8c3095de1/Tasks/JavaToolInstallerV0/javatoolinstaller.ts#L8

在为基于 Unix 的代理运行 Maven 之前添加以下script

- script: |
    echo "##vso[task.setvariable variable=JAVA_HOME]$(JAVA_HOME_11_X64)"
    echo "##vso[task.setvariable variable=PATH]$(JAVA_HOME_11_X64)/bin:$(PATH)"
  displayName: "Set java version"

适用于基于 Windows 的代理

- script: |
    echo "##vso[task.setvariable variable=JAVA_HOME]$(JAVA_HOME_11_X64)"
    echo "##vso[task.setvariable variable=PATH]$(JAVA_HOME_11_X64)\bin;$(PATH)"
  displayName: "Set java version"

这部分管道代码显示了如何选择 JAVA_HOME 值: https://github.com/microsoft/azure-pipelines-tasks/blob/master/Tasks/Common/java-common/java-common.ts

可以通过 Linux 或 macOS 的任务的env字段设置要使用的 Java 版本:

- script: |
    java -version
  env:
    JAVA_HOME: $(JAVA_HOME_8_X64)
    PATH: $(JAVA_HOME_8_X64)/bin:$(PATH)

对于 Windows,将 PATH 中的冒号更改为分号:

- script: |
    java -version
  env:
    JAVA_HOME: $(JAVA_HOME_8_X64)
    PATH: $(JAVA_HOME_8_X64)/bin;$(PATH)

Java 版本的替代品包括:

  • JAVA_HOME_7_X64
    • 适用于 Windows: vs2017-win2016windows-2019
    • 适用于 macOS: macos-10.14macos-10.15
    • 在 Linux 上可用: ubuntu-16.04ubuntu-18.04
  • JAVA_HOME_8_X64
    • 适用于 Windows: vs2017-win2016windows-2019
    • 在 macOS 上可用: macos-10.14macos-10.15
    • 在 Linux 上可用: ubuntu-16.04ubuntu-18.04ubuntu-20.04
  • JAVA_HOME_11_X64
    • 适用于 Windows: vs2017-win2016windows-2019
    • 在 macOS 上可用: macos-10.14macos-10.15
    • 在 Linux 上可用: ubuntu-16.04ubuntu-18.04ubuntu-20.04
  • JAVA_HOME_12_X64
    • 在 macOS 上可用: macos-10.14macos-10.15
    • 在 Linux 上可用: ubuntu-16.04ubuntu-18.04
  • JAVA_HOME_13_X64
    • 适用于 Windows: vs2017-win2016windows-2019
    • 在 macOS 上可用: macos-10.14macos-10.15
  • JAVA_HOME_14_X64
    • 在 macOS 上可用: macos-10.14macos-10.15

就像Martin Kreidenweis已经提到的那样,可以使用JavaToolInstaller
但是,当在自托管代理上使用此功能时,需要在代理上安装 Java,并且需要将所需的环境变量设置为指向安装目录。

JavaToolInstaller 使用从其配置派生的环境变量。 习俗:

JAVA_HOME_${versionSpec}_${jdkArchitectureOption}

我们可以在.env文件中的代理主目录中设置环境变量,如下所示:

JAVA_HOME_17_x64=/usr/lib/jvm/temurin-17-jdk-amd64

编辑.env后,需要重新启动代理以使环境变量可用于管道。 这可以通过(agent home)完成:

./svc.sh stop
./svc.sh start

请参阅Azure 文档

之后可以添加一个步骤,例如:

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM