簡體   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