![](/img/trans.png)
[英]Azure CI Pipeline fails to build Java / Maven solution with 2 projects
[英]How to install java 13 on Azure-pipeline Ubuntu agent and use it during Maven build?
我正在嘗試構建一個 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
“預安裝”功能允許您使用預安裝在 Microsoft 托管代理上的 Java 版本。 您可以在軟件部分找到 Java 的可用預安裝版本:
我認為您的腳本無法以某種方式在托管計算機上運行。 而且,您指定的 JDK 版本不在您的主機上。 我建議您根據上表設置您的主機(根據安裝的預定義 JDK)。
因此,可以利用其他兩個選項:
這是從 Linux 上的本地目錄獲取存檔文件的示例。 該文件應該是JAVA_HOME
目錄的存檔文件( .zip
, .gz
),以便它包含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 存儲下載存檔文件的示例。 該文件應該是JAVA_HOME
目錄的存檔文件( .zip
, .gz
),以便它包含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
問題是我指向了錯誤的安裝目錄。 我在互聯網上找到的 JAVA_HOME 的上述位置,在輸出 /usrl/lib/jvm 的樹內容后,我對其進行了更改並將其添加到變量部分,maven 找到了 jdk 並使用它
JAVA_HOME_13_X64 : "/usr/lib/jvm/java-13-openjdk-amd64"
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.