1

我正在尝试构建一个 Java Maven 应用程序并针对 Postgres 数据库运行一些测试。

但是,Java 应用程序使用 JDK 13,并且 Azure 托管代理 ubuntu 没有安装此默认值。因此,我使用脚本任务来安装它,然后在 Maven 构建期间使用它。

但是,我尝试了几个配置,并且在所有 Maven 中一直抱怨它找不到任何安装的 JDK 13。

下面列出了我尝试的最后一个配置,其中我通过脚本安装它,然后使用 JavaToolInstaller 任务使其可用(确保设置了 Java_home 并且可以在路径中找到 java。然后我得到错误

##[error]Java 13 is not preinstalled on this agent

我也试过没有JavaToolInstaller任务然后导出JAVA_HOME并修改脚本中的PATH,但是Maven抱怨它找不到JDK 13 ...

请帮助如何在 Maven 构建期间在 ubuntu 代理上使用 JDK 13?

Azure 管道片段:

    variables:
    MAVEN_CACHE_FOLDER: $(Pipeline.Workspace)/.m2/repository
    MAVEN_OPTS: "-Dmaven.repo.local=$(MAVEN_CACHE_FOLDER)"
    JAVA_HOME : "/usr/lib/jvm/openjdk-13-jdk"
    PATH: $(JAVA_HOME)/bin:$(PATH)
    service_name: backend
    mygetUsername: myUserName
    mygetPassword: myPassword

resources:
    containers:
        - container: postgres
          image: postgres:11.6-alpine
          ports:
              - 5432:5432
          env:
              POSTGRES_DB: default
              POSTGRES_USER: default
              POSTGRES_PASSWORD: default
              POSTGRES_HOST_AUTH_METHOD: trust


stages:
    - stage: create_artifact
      displayName: Create artifact
      jobs:
          - job: build
            displayName: Build, test and publish artifact
            services:
                postgres: postgres
            steps:
                - script: |
                    sudo apt-get install openjdk-13-jdk  
                  displayName: Installing JDK 13

                - task: JavaToolInstaller@0
                  displayName: Using JDK 13
                  inputs:
                    versionSpec: "13"
                    jdkArchitectureOption: x64
                    jdkSourceOption: "PreInstalled"

                - task: Cache@2
                  displayName: Cache Maven local repo
                  inputs:
                      key: 'maven | "$(Agent.OS)" | backend/pom.xml'
                      restoreKeys: |
                          maven | "$(Agent.OS)"
                          maven
                      path: $(MAVEN_CACHE_FOLDER)
                - task: Maven@3
                  name: maven_package
                  displayName: Maven package
                  inputs:
                      goals: "package"
                      mavenPomFile: "backend/pom.xml"
                      options: '--settings backend/.mvn/settings.xml -DmygetUsername=$(mygetUsername) -DmygetPassword=$(mygetPassword)'
                      mavenOptions: "-Xmx3072m $(MAVEN_OPTS)"
                      javaHomeOption: "JDKVersion"
                      jdkVersionOption: "1.13"
                      mavenAuthenticateFeed: true
4

2 回答 2

1

“预安装”功能允许您使用预安装在 Microsoft 托管代理上的 Java 版本。您可以在软件部分找到可用的 Java 预安装版本:

在此处输入图像描述

我认为您的脚本无法以某种方式在托管计算机上运行。而且,您指定的 JDK 版本不在您的主机上。我建议您根据上表设置您的主机(根据安装的预定义 JDK)。

因此,可以利用其他两个选项:

这是从 Linux 上的本地目录获取存档文件的示例。该文件应该是目录的存档 ( .zip, .gz),JAVA_HOME以便它包含bin, lib, include,jre等目录。

 - task: JavaToolInstaller@0
    inputs:
      versionSpec: "11"
      jdkArchitectureOption: x64
      jdkSourceOption: LocalDirectory
      jdkFile: "/builds/openjdk-11.0.2_linux-x64_bin.tar.gz"
      jdkDestinationDirectory: "/builds/binaries/externals"
      cleanDestinationDirectory: true

下面是从 Azure 存储下载存档文件的示例。该文件应该是目录的存档 ( .zip, .gz),JAVA_HOME以便它包含bin, lib, include,jre等目录。

- task: JavaToolInstaller@0
  inputs:
    versionSpec: '6'
    jdkArchitectureOption: 'x64'
    jdkSourceOption: AzureStorage
    azureResourceManagerEndpoint: myARMServiceConnection
    azureStorageAccountName: myAzureStorageAccountName
    azureContainerName: myAzureStorageContainerName
    azureCommonVirtualFile: 'jdk1.6.0_45.zip'
    jdkDestinationDirectory: '$(agent.toolsDirectory)/jdk6'
    cleanDestinationDirectory: false
于 2021-03-11T17:57:34.377 回答
0

问题是我指向了错误的安装目录。我在互联网上找到的 JAVA_HOME 的上述位置,在输出 /usrl/lib/jvm 的树内容后,我对其进行了更改并将其添加到变量部分,maven 找到了 jdk 并使用它

JAVA_HOME_13_X64 : "/usr/lib/jvm/java-13-openjdk-amd64"
于 2021-03-12T22:43:06.797 回答