diff --git a/images/macos/provision/core/openjdk.sh b/images/macos/provision/core/openjdk.sh index 7a4a967e3..eb4034b2c 100644 --- a/images/macos/provision/core/openjdk.sh +++ b/images/macos/provision/core/openjdk.sh @@ -1,28 +1,53 @@ #!/bin/bash -e -o pipefail source ~/utils/utils.sh +JAVA_TOOLCACHE_PATH=$AGENT_TOOLSDIRECTORY/Java_Adopt_jdk + createEnvironmentVariable() { - local VARIABLE_NAME=$1 - local JAVA_VERSION=$2 - if [[ $JAVA_VERSION == "8" ]]; then - JAVA_VERSION="1.${JAVA_VERSION}" + local JAVA_VERSION=$1 + local JAVA_PATH=$2 + + local JAVA_HOME_PATH=$JAVA_PATH/Contents/Home + if [[ $JAVA_VERSION == $JAVA_DEFAULT ]]; then + echo "export JAVA_HOME=${JAVA_HOME_PATH}" >> "${HOME}/.bashrc" fi - local JAVA_PATH=$(/usr/libexec/java_home -v${JAVA_VERSION}) - echo "export ${VARIABLE_NAME}=${JAVA_PATH}" >> "${HOME}/.bashrc" + echo "export JAVA_HOME_${JAVA_VERSION}_X64=${JAVA_HOME_PATH}" >> "${HOME}/.bashrc" } -brew tap AdoptOpenJDK/openjdk +installJavaFromAdoptOpenJDK() { + local JAVA_VERSION=$1 + + # 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') + + 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 + + createEnvironmentVariable $JAVA_VERSION $javaToolcacheVersionArchPath + + # 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 +} JAVA_VERSIONS_LIST=($(get_toolset_value '.java.versions | .[]')) JAVA_DEFAULT=$(get_toolset_value '.java.default') + for JAVA_VERSION in "${JAVA_VERSIONS_LIST[@]}" do - brew install --cask "adoptopenjdk${JAVA_VERSION}" - createEnvironmentVariable "JAVA_HOME_${JAVA_VERSION}_X64" $JAVA_VERSION + installJavaFromAdoptOpenJDK $JAVA_VERSION done -createEnvironmentVariable "JAVA_HOME" $JAVA_DEFAULT - 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 f9d928f82..29dc61dfc 100644 --- a/images/macos/software-report/SoftwareReport.Java.psm1 +++ b/images/macos/software-report/SoftwareReport.Java.psm1 @@ -1,12 +1,3 @@ -function Get-JavaFullVersion { - param($JavaRootPath) - - $javaBinPath = Join-Path $javaRootPath "/bin/java" - $javaVersionOutput = (Get-CommandResult "$javaBinPath -version").Output - $matchResult = $javaVersionOutput | Select-String '^openjdk version \"([\d\._]+)\"' - return $matchResult.Matches.Groups[1].Value -} - function Get-JavaVersions { $defaultJavaPath = Get-Item env:JAVA_HOME $javaVersions = Get-Item env:JAVA_HOME_*_X64 @@ -17,12 +8,13 @@ function Get-JavaVersions { return $javaVersions | Sort-Object $sortRules | ForEach-Object { $javaPath = $_.Value - $version = Get-JavaFullVersion $javaPath + # Take semver from the java path + $version = $javaPath.split('/')[5] $defaultPostfix = ($javaPath -eq $defaultJavaPath) ? " (default)" : "" [PSCustomObject] @{ "Version" = $version + $defaultPostfix - "Vendor" = "AdoptOpenJDK" + "Vendor" = "Adopt OpenJDK" "Environment Variable" = $_.Name } } diff --git a/images/macos/tests/Java.Tests.ps1 b/images/macos/tests/Java.Tests.ps1 index f455cf731..340e0ef98 100644 --- a/images/macos/tests/Java.Tests.ps1 +++ b/images/macos/tests/Java.Tests.ps1 @@ -35,15 +35,7 @@ Describe "Java" { "/usr/libexec/java_home -v${Version}" | Should -ReturnZeroExitCode } - if ($_.Title -ne "Default") { - It "Version is valid" -TestCases $_ { - $javaRootPath = "/Library/Java/JavaVirtualMachines/adoptopenjdk-${Title}.jdk/Contents/Home" - $javaBinPath = Join-Path $javaRootPath "/bin/java" - Validate-JavaVersion -JavaCommand "$javaBinPath -version" -ExpectedVersion $Version - } - } - - It "" -TestCases $_ { + It "Java " -TestCases $_ { $envVariablePath = Get-EnvironmentVariable $EnvVariable $javaBinPath = Join-Path $envVariablePath "/bin/java" Validate-JavaVersion -JavaCommand "$javaBinPath -version" -ExpectedVersion $Version