diff --git a/images/macos/provision/core/openjdk.sh b/images/macos/provision/core/openjdk.sh old mode 100644 new mode 100755 index 72504f2fd..5af741135 --- a/images/macos/provision/core/openjdk.sh +++ b/images/macos/provision/core/openjdk.sh @@ -1,53 +1,90 @@ #!/bin/bash -e -o pipefail source ~/utils/utils.sh -JAVA_TOOLCACHE_PATH=$AGENT_TOOLSDIRECTORY/Java_Adopt_jdk - createEnvironmentVariable() { local JAVA_VERSION=$1 - local JAVA_PATH=$2 + local VENDOR_NAME=$2 + local DEFAULT=$3 - local JAVA_HOME_PATH=$JAVA_PATH/Contents/Home - if [[ $JAVA_VERSION == $JAVA_DEFAULT ]]; then - echo "export JAVA_HOME=${JAVA_HOME_PATH}" >> "${HOME}/.bashrc" + INSTALL_PATH_PATTERN=$(echo ${AGENT_TOOLSDIRECTORY}/Java_${VENDOR_NAME}_jdk/${JAVA_VERSION}*/x64/Contents/Home/) + + if [[ ${DEFAULT} == "True" ]]; then + echo "Setting up JAVA_HOME variable to ${INSTALL_PATH_PATTERN}" + echo "export JAVA_HOME=${INSTALL_PATH_PATTERN}" >> "${HOME}/.bashrc" fi - echo "export JAVA_HOME_${JAVA_VERSION}_X64=${JAVA_HOME_PATH}" >> "${HOME}/.bashrc" + + echo "Setting up JAVA_HOME_${JAVA_VERSION}_X64 variable to ${INSTALL_PATH_PATTERN}" + echo "export JAVA_HOME_${JAVA_VERSION}_X64=${INSTALL_PATH_PATTERN}" >> "${HOME}/.bashrc" } -installJavaFromAdoptOpenJDK() { +installOpenJDK() { local JAVA_VERSION=$1 + local VENDOR_NAME=$2 # Get link for Java binaries and Java version - assetUrl=$(curl -s "https://api.adoptopenjdk.net/v3/assets/latest/${JAVA_VERSION}/hotspot") - asset=$(echo $assetUrl | jq -r '.[] | select(.binary.os=="mac" and .binary.image_type=="jdk" and .binary.architecture=="x64")') - archivePath=$(echo $asset | jq -r '.binary.package.link') - fullVersion=$(echo $asset | jq -r '.version.semver' | tr '+' '-') + if [[ ${VENDOR_NAME} == "Temurin-Hotspot" ]]; then + assetUrl=$(curl -s "https://api.adoptium.net/v3/assets/latest/${JAVA_VERSION}/hotspot") + elif [[ ${VENDOR_NAME} == "Adopt" ]]; then + assetUrl=$(curl -s "https://api.adoptopenjdk.net/v3/assets/latest/${JAVA_VERSION}/hotspot") + else + echo "${VENDOR_NAME} is invalid, valid names are: Temurin-Hotspot and Adopt" + exit 1 + fi - javaToolcacheVersionPath=$JAVA_TOOLCACHE_PATH/$fullVersion - javaToolcacheVersionArchPath=$javaToolcacheVersionPath/x64 + asset=$(echo ${assetUrl} | jq -r '.[] | select(.binary.os=="mac" and .binary.image_type=="jdk" and .binary.architecture=="x64")') + archivePath=$(echo ${asset} | jq -r '.binary.package.link') + fullVersion=$(echo ${asset} | jq -r '.version.semver' | tr '+' '-') + + JAVA_TOOLCACHE_PATH=${AGENT_TOOLSDIRECTORY}/Java_${VENDOR_NAME}_jdk + + javaToolcacheVersionPath=$JAVA_TOOLCACHE_PATH/${fullVersion} + javaToolcacheVersionArchPath=${javaToolcacheVersionPath}/x64 # Download and extract Java binaries - download_with_retries $archivePath /tmp OpenJDK${JAVA_VERSION}.tar.gz - mkdir -p $javaToolcacheVersionArchPath - tar -xzf /tmp/OpenJDK${JAVA_VERSION}.tar.gz -C $javaToolcacheVersionArchPath --strip-components=1 - # Create complete file - touch $javaToolcacheVersionPath/x64.complete + download_with_retries ${archivePath} /tmp OpenJDK-${VENDOR_NAME}-${fullVersion}.tar.gz + + echo "Creating ${javaToolcacheVersionArchPath} directory" + mkdir -p ${javaToolcacheVersionArchPath} - createEnvironmentVariable $JAVA_VERSION $javaToolcacheVersionArchPath + tar -xf /tmp/OpenJDK-${VENDOR_NAME}-${fullVersion}.tar.gz -C ${javaToolcacheVersionArchPath} --strip-components=1 + # Create complete file + touch ${javaToolcacheVersionPath}/x64.complete # Create a symlink to '/Library/Java/JavaVirtualMachines' # so '/usr/libexec/java_home' will be able to find Java - sudo ln -sf $javaToolcacheVersionArchPath /Library/Java/JavaVirtualMachines/adoptopenjdk-${JAVA_VERSION}.jdk + sudo ln -sf ${javaToolcacheVersionArchPath} /Library/Java/JavaVirtualMachines/${VENDOR_NAME}-${JAVA_VERSION}.jdk } -JAVA_VERSIONS_LIST=($(get_toolset_value '.java.versions | .[]')) -JAVA_DEFAULT=$(get_toolset_value '.java.default') +defaultVersion=$(get_toolset_value '.java.default') +defaultVendor=$(get_toolset_value '.java.default_vendor') +jdkVendors=($(get_toolset_value '.java.vendors[].name')) -for JAVA_VERSION in "${JAVA_VERSIONS_LIST[@]}" -do - installJavaFromAdoptOpenJDK $JAVA_VERSION +for jdkVendor in ${jdkVendors[@]}; do + + # get vendor-specific versions + jdkVersionsToInstall=($(get_toolset_value ".java.vendors[] | select (.name==\"${jdkVendor}\") | .versions[]")) + + for jdkVersionToInstall in ${jdkVersionsToInstall[@]}; do + + installOpenJDK ${jdkVersionToInstall} ${jdkVendor} + + isDefaultVersion=False; [[ ${jdkVersionToInstall} == ${defaultVersion} ]] && isDefaultVersion=True + + if [[ ${jdkVendor} == ${defaultVendor} ]]; then + createEnvironmentVariable ${jdkVersionToInstall} ${jdkVendor} ${isDefaultVersion} + fi + + done done +# Big Sur or newer does not have these versions of Adopt. +# Also hardcode these versions as they only exist for Adopt +if is_Less_BigSur; then + for adoptVersionToInstall in 12 13 14; do + createEnvironmentVariable ${adoptVersionToInstall} "Adopt" + done +fi + echo Installing Maven... brew_smart_install "maven" diff --git a/images/macos/software-report/SoftwareReport.Java.psm1 b/images/macos/software-report/SoftwareReport.Java.psm1 index 97f81c213..9b5224725 100644 --- a/images/macos/software-report/SoftwareReport.Java.psm1 +++ b/images/macos/software-report/SoftwareReport.Java.psm1 @@ -12,10 +12,11 @@ function Get-JavaVersions { $version = $javaPath.split('/')[5] $fullVersion = $version.Replace('-', '+') $defaultPostfix = ($javaPath -eq $defaultJavaPath) ? " (default)" : "" + $vendorName = ($javaPath -like '*Java_Adopt_jdk*') ? "Adopt OpenJDK" : "Eclipse Temurin" [PSCustomObject] @{ "Version" = $fullVersion + $defaultPostfix - "Vendor" = "Adopt OpenJDK" + "Vendor" = $vendorName "Environment Variable" = $_.Name } } diff --git a/images/macos/tests/Java.Tests.ps1 b/images/macos/tests/Java.Tests.ps1 index beeedf228..fd67ea656 100644 --- a/images/macos/tests/Java.Tests.ps1 +++ b/images/macos/tests/Java.Tests.ps1 @@ -23,11 +23,17 @@ Describe "Java" { } } - $versionsList = Get-ToolsetValue "java.versions" - $defaultJava = Get-ToolsetValue "java.default" + $toolsetJava = Get-ToolsetValue "java" + $defaultVersion = $toolsetJava.default + $defaultVendor = $toolsetJava.default_vendor + $javaVendors = $toolsetJava.vendors - $testCases = $versionsList | ForEach-Object { @{ Title = $_; Version = (Get-NativeVersionFormat $_); EnvVariable = "JAVA_HOME_${_}_X64" } } - $testCases += @{ Title = "Default"; Version = (Get-NativeVersionFormat $defaultJava); EnvVariable = "JAVA_HOME" } + [array]$jdkVersions = ($javaVendors | Where-Object {$_.name -eq $defaultVendor}).versions + [array]$adoptJdkVersions = ($javaVendors | Where-Object {$_.name -eq "Adopt"}).versions + + $adoptCases = $adoptJdkVersions | ForEach-Object { @{Version = $_} } + $testCases = $jdkVersions | ForEach-Object { @{ Title = $_; Version = (Get-NativeVersionFormat $_); EnvVariable = "JAVA_HOME_${_}_X64" } } + $testCases += @{ Title = "Default"; Version = (Get-NativeVersionFormat $defaultVersion); EnvVariable = "JAVA_HOME" } $testCases | ForEach-Object { Context $_.Title { @@ -49,6 +55,17 @@ Describe "Java" { } } + Context "Java Adopt" { + Describe "Java Adopt" { + It "Java Adopt " -TestCases $adoptCases { + $adoptPath = Join-Path (Get-ChildItem ${env:AGENT_TOOLSDIRECTORY}\Java_Adopt_jdk\${Version}*) "x64\Contents\Home\bin\java" + + $result = Get-CommandResult "`"$adoptPath`" -version" + $result.ExitCode | Should -Be 0 + } + } + } + Context "Maven" { Describe "Maven" { It "Maven" { diff --git a/images/macos/toolsets/toolset-10.14.json b/images/macos/toolsets/toolset-10.14.json index 20402349b..e84b0a00e 100644 --- a/images/macos/toolsets/toolset-10.14.json +++ b/images/macos/toolsets/toolset-10.14.json @@ -197,8 +197,16 @@ }, "java": { "default": "8", - "versions": [ - "8", "11", "12", "13", "14" + "default_vendor": "Temurin-Hotspot", + "vendors": [ + { + "name": "Temurin-Hotspot", + "versions": [ "8", "11" ] + }, + { + "name": "Adopt", + "versions": [ "8", "11", "12", "13", "14" ] + } ] }, "android": { diff --git a/images/macos/toolsets/toolset-10.15.json b/images/macos/toolsets/toolset-10.15.json index 76971fb49..8b9f4a8eb 100644 --- a/images/macos/toolsets/toolset-10.15.json +++ b/images/macos/toolsets/toolset-10.15.json @@ -149,8 +149,16 @@ }, "java": { "default": "8", - "versions": [ - "8", "11", "12", "13", "14" + "default_vendor": "Temurin-Hotspot", + "vendors": [ + { + "name": "Temurin-Hotspot", + "versions": [ "8", "11" ] + }, + { + "name": "Adopt", + "versions": [ "8", "11", "12", "13", "14" ] + } ] }, "android": { diff --git a/images/macos/toolsets/toolset-11.json b/images/macos/toolsets/toolset-11.json index 4e64229f3..2868bbdc8 100644 --- a/images/macos/toolsets/toolset-11.json +++ b/images/macos/toolsets/toolset-11.json @@ -100,8 +100,16 @@ }, "java": { "default": "8", - "versions": [ - "8", "11" + "default_vendor": "Temurin-Hotspot", + "vendors": [ + { + "name": "Temurin-Hotspot", + "versions": [ "8", "11" ] + }, + { + "name": "Adopt", + "versions": [ "8", "11" ] + } ] }, "android": {