Automated Java Installer Scripts: Batch & Shell Examples
Automating Java installation saves time and ensures consistency across machines. Below are actionable, ready-to-use examples for Windows (batch/PowerShell) and Unix-like systems (shell), plus guidance for choosing JDK distributions, verifying installs, and adding to automation tools.
Which Java build to use (quick guidance)
- OpenJDK (Adoptium Temurin) — community builds, good for most uses.
- Oracle JDK — commercial license for recent versions; choose if required.
- Amazon Corretto, Azul Zulu — alternative long-term-support builds.
Default assumption: use OpenJDK Temurin binary distributions.
Windows — Batch script (offline installer + silent install)
Use when you have an MSI or EXE installer. This batch script assumes an MSI named jdk.msi in the same folder.
batch
@echo off setlocal set JDK_MSI=jdk.msi set INSTALL_DIR=C:\Program Files\Java\jdk if not exist ”%JDK_MSI%” ( echo Error: %JDK_MSI% not found. exit /b 1 ) msiexec /i ”%JDK_MSI%” /qn INSTALLDIR=”%INSTALL_DIR%” /norestart if errorlevel 1 ( echo Installation failed with code %errorlevel%. exit /b %errorlevel% ) REM Set system environment variables (requires elevated prompt) reg add “HKLM\SYSTEM\CurrentControlSet\Control\Session Manager\Environment” /v JAVA_HOME /t REG_SZ /d ”%INSTALL_DIR%” /f reg add “HKLM\SYSTEM\CurrentControlSet\Control\Session Manager\Environment” /v Path /t REG_EXPAND_SZ /d ”%%PATH%%;%INSTALL_DIR%\bin” /f echo Java installed to %INSTALLDIR% endlocal
Notes:
- Run as Administrator. Adjust installer filename and INSTALLDIR as needed.
- For EXE installers, check vendor silent-install flags (e.g., /s, /quiet, /qn).
Windows — PowerShell script (download + install Temurin MSI)
PowerShell can fetch a release and run the MSI silently.
powershell
\(msiUrl</span><span> = </span><span class="token" style="color: rgb(163, 21, 21);">"https://github.com/adoptium/temurin17-binaries/releases/latest/download/OpenJDK17U-jdk_x64_windows_hotspot_latest.msi"</span><span> </span><span></span><span class="token" style="color: rgb(54, 172, 170);">\)msiPath = “\(env</span><span class="token" style="color: rgb(163, 21, 21);">:TEMP\jdk.msi"</span><span> </span><span></span><span class="token" style="color: rgb(57, 58, 52);">Invoke-WebRequest</span><span> </span><span class="token" style="color: rgb(57, 58, 52);">-</span><span>Uri </span><span class="token" style="color: rgb(54, 172, 170);">\)msiUrl -OutFile \(msiPath</span><span> </span> <span></span><span class="token" style="color: rgb(57, 58, 52);">Start-Process</span><span> msiexec</span><span class="token" style="color: rgb(57, 58, 52);">.</span><span>exe </span><span class="token" style="color: rgb(57, 58, 52);">-</span><span>ArgumentList </span><span class="token" style="color: rgb(163, 21, 21);">"/i `"</span><span class="token" style="color: rgb(54, 172, 170);">\)msiPath`” /qn /norestart” -Wait -NoNewWindow \(installDir</span><span> = </span><span class="token" style="color: rgb(163, 21, 21);">"C:\Program Files\Eclipse Adoptium\jdk-17"</span><span> </span><span></span><span class="token">[Environment]</span><span>::SetEnvironmentVariable</span><span class="token" style="color: rgb(57, 58, 52);">(</span><span class="token" style="color: rgb(163, 21, 21);">"JAVA_HOME"</span><span class="token" style="color: rgb(57, 58, 52);">,</span><span class="token" style="color: rgb(54, 172, 170);">\)installDir,[EnvironmentVariableTarget]::Machine) \(path</span><span> = </span><span class="token">[Environment]</span><span>::GetEnvironmentVariable</span><span class="token" style="color: rgb(57, 58, 52);">(</span><span class="token" style="color: rgb(163, 21, 21);">"Path"</span><span class="token" style="color: rgb(57, 58, 52);">,</span><span class="token">[EnvironmentVariableTarget]</span><span>::Machine</span><span class="token" style="color: rgb(57, 58, 52);">)</span><span> </span><span></span><span class="token" style="color: rgb(0, 0, 255);">if</span><span> </span><span class="token" style="color: rgb(57, 58, 52);">(</span><span class="token" style="color: rgb(54, 172, 170);">\)path -notlike “$installDir\bin”) { [Environment]::SetEnvironmentVariable(“Path”,“\(path</span><span class="token" style="color: rgb(163, 21, 21);">;</span><span class="token" style="color: rgb(54, 172, 170);">\)installDir\bin”,[EnvironmentVariableTarget]::Machine) } Write-Output “Java installed to \(installDir</span><span class="token" style="color: rgb(163, 21, 21);">"</span><span> </span></code></div></div></pre> <p>Notes:</p> <ul> <li>URL should be updated to the exact desired release; "latest" link may change.</li> <li>Run PowerShell elevated.</li> </ul> <h2>macOS / Linux — Shell script (deb/rpm or tarball)</h2> <p>Two common patterns: package manager (apt/yum/dnf) where available or tarball extraction.</p> <p>Example A — Debian/Ubuntu using apt (Adoptium APT repo):</p> <pre><div class="XG2rBS5V967VhGTCEN1k"><div class="nHykNMmtaaTJMjgzStID"><div class="HsT0RHFbNELC00WicOi8"><i><svg width="16" height="16" fill="none" xmlns="http://www.w3.org/2000/svg"><path fill="currentColor" fill-rule="evenodd" clip-rule="evenodd" d="M15.434 7.51c.137.137.212.311.212.49a.694.694 0 0 1-.212.5l-3.54 3.5a.893.893 0 0 1-.277.18 1.024 1.024 0 0 1-.684.038.945.945 0 0 1-.302-.148.787.787 0 0 1-.213-.234.652.652 0 0 1-.045-.58.74.74 0 0 1 .175-.256l3.045-3-3.045-3a.69.69 0 0 1-.22-.55.723.723 0 0 1 .303-.52 1 1 0 0 1 .648-.186.962.962 0 0 1 .614.256l3.541 3.51Zm-12.281 0A.695.695 0 0 0 2.94 8a.694.694 0 0 0 .213.5l3.54 3.5a.893.893 0 0 0 .277.18 1.024 1.024 0 0 0 .684.038.945.945 0 0 0 .302-.148.788.788 0 0 0 .213-.234.651.651 0 0 0 .045-.58.74.74 0 0 0-.175-.256L4.994 8l3.045-3a.69.69 0 0 0 .22-.55.723.723 0 0 0-.303-.52 1 1 0 0 0-.648-.186.962.962 0 0 0-.615.256l-3.54 3.51Z"></path></svg></i><p class="li3asHIMe05JPmtJCytG wZ4JdaHxSAhGy1HoNVja cPy9QU4brI7VQXFNPEvF">bash</p></div><div class="CF2lgtGWtYUYmTULoX44"><button type="button" class="st68fcLUUT0dNcuLLB2_ ffON2NH02oMAcqyoh2UU MQCbz04ET5EljRmK3YpQ CPXAhl7VTkj2dHDyAYAf" data-copycode="true" role="button" aria-label="Copy Code"><svg viewBox="0 0 16 16" fill="none" xmlns="http://www.w3.org/2000/svg"><path fill="currentColor" fill-rule="evenodd" clip-rule="evenodd" d="M9.975 1h.09a3.2 3.2 0 0 1 3.202 3.201v1.924a.754.754 0 0 1-.017.16l1.23 1.353A2 2 0 0 1 15 8.983V14a2 2 0 0 1-2 2H8a2 2 0 0 1-1.733-1H4.183a3.201 3.201 0 0 1-3.2-3.201V4.201a3.2 3.2 0 0 1 3.04-3.197A1.25 1.25 0 0 1 5.25 0h3.5c.604 0 1.109.43 1.225 1ZM4.249 2.5h-.066a1.7 1.7 0 0 0-1.7 1.701v7.598c0 .94.761 1.701 1.7 1.701H6V7a2 2 0 0 1 2-2h3.197c.195 0 .387.028.57.083v-.882A1.7 1.7 0 0 0 10.066 2.5H9.75c-.228.304-.591.5-1 .5h-3.5c-.41 0-.772-.196-1-.5ZM5 1.75v-.5A.25.25 0 0 1 5.25 1h3.5a.25.25 0 0 1 .25.25v.5a.25.25 0 0 1-.25.25h-3.5A.25.25 0 0 1 5 1.75ZM7.5 7a.5.5 0 0 1 .5-.5h3V9a1 1 0 0 0 1 1h1.5v4a.5.5 0 0 1-.5.5H8a.5.5 0 0 1-.5-.5V7Zm6 2v-.017a.5.5 0 0 0-.13-.336L12 7.14V9h1.5Z"></path></svg>Copy Code</button><button type="button" class="st68fcLUUT0dNcuLLB2_ WtfzoAXPoZC2mMqcexgL ffON2NH02oMAcqyoh2UU MQCbz04ET5EljRmK3YpQ GnLX_jUB3Jn3idluie7R"><svg fill="none" viewBox="0 0 24 24" xmlns="http://www.w3.org/2000/svg"><path fill="currentColor" fill-rule="evenodd" d="M20.618 4.214a1 1 0 0 1 .168 1.404l-11 14a1 1 0 0 1-1.554.022l-5-6a1 1 0 0 1 1.536-1.28l4.21 5.05L19.213 4.382a1 1 0 0 1 1.404-.168Z" clip-rule="evenodd"></path></svg>Copied</button></div></div><div class="mtDfw7oSa1WexjXyzs9y" style="color: var(--sds-color-text-01); font-family: var(--sds-font-family-monospace); direction: ltr; text-align: left; white-space: pre; word-spacing: normal; word-break: normal; font-size: var(--sds-font-size-label); line-height: 1.2em; tab-size: 4; hyphens: none; padding: var(--sds-space-x02, 8px) var(--sds-space-x04, 16px) var(--sds-space-x04, 16px); margin: 0px; overflow: auto; border: none; background: transparent;"><code class="language-bash" style="color: rgb(57, 58, 52); font-family: Consolas, "Bitstream Vera Sans Mono", "Courier New", Courier, monospace; direction: ltr; text-align: left; white-space: pre; word-spacing: normal; word-break: normal; font-size: 0.9em; line-height: 1.2em; tab-size: 4; hyphens: none;"><span class="token shebang" style="color: rgb(238, 153, 0); font-weight: bold;">#!/usr/bin/env bash</span><span> </span><span></span><span class="token builtin" style="color: rgb(43, 145, 175);">set</span><span> -euo pipefail </span> <span></span><span class="token" style="color: rgb(0, 128, 0); font-style: italic;"># Add Adoptium repo (Debian/Ubuntu)</span><span> </span><span></span><span class="token" style="color: rgb(57, 58, 52);">wget</span><span> -qO - https://packages.adoptium.net/artifactory/api/gpg/key/public </span><span class="token" style="color: rgb(57, 58, 52);">|</span><span> </span><span class="token" style="color: rgb(57, 58, 52);">sudo</span><span> apt-key </span><span class="token" style="color: rgb(57, 58, 52);">add</span><span> - </span><span></span><span class="token" style="color: rgb(57, 58, 52);">sudo</span><span> apt-add-repository --yes https://packages.adoptium.net/artifactory/deb/ubuntu </span><span></span><span class="token" style="color: rgb(57, 58, 52);">sudo</span><span> </span><span class="token" style="color: rgb(57, 58, 52);">apt-get</span><span> update </span><span></span><span class="token" style="color: rgb(57, 58, 52);">sudo</span><span> </span><span class="token" style="color: rgb(57, 58, 52);">apt-get</span><span> </span><span class="token" style="color: rgb(57, 58, 52);">install</span><span> -y temurin-17-jdk </span> java -version </code></div></div></pre> <p>Example B — RHEL/CentOS using yum/dnf (Adoptium RPM repo):</p> <pre><div class="XG2rBS5V967VhGTCEN1k"><div class="nHykNMmtaaTJMjgzStID"><div class="HsT0RHFbNELC00WicOi8"><i><svg width="16" height="16" fill="none" xmlns="http://www.w3.org/2000/svg"><path fill="currentColor" fill-rule="evenodd" clip-rule="evenodd" d="M15.434 7.51c.137.137.212.311.212.49a.694.694 0 0 1-.212.5l-3.54 3.5a.893.893 0 0 1-.277.18 1.024 1.024 0 0 1-.684.038.945.945 0 0 1-.302-.148.787.787 0 0 1-.213-.234.652.652 0 0 1-.045-.58.74.74 0 0 1 .175-.256l3.045-3-3.045-3a.69.69 0 0 1-.22-.55.723.723 0 0 1 .303-.52 1 1 0 0 1 .648-.186.962.962 0 0 1 .614.256l3.541 3.51Zm-12.281 0A.695.695 0 0 0 2.94 8a.694.694 0 0 0 .213.5l3.54 3.5a.893.893 0 0 0 .277.18 1.024 1.024 0 0 0 .684.038.945.945 0 0 0 .302-.148.788.788 0 0 0 .213-.234.651.651 0 0 0 .045-.58.74.74 0 0 0-.175-.256L4.994 8l3.045-3a.69.69 0 0 0 .22-.55.723.723 0 0 0-.303-.52 1 1 0 0 0-.648-.186.962.962 0 0 0-.615.256l-3.54 3.51Z"></path></svg></i><p class="li3asHIMe05JPmtJCytG wZ4JdaHxSAhGy1HoNVja cPy9QU4brI7VQXFNPEvF">bash</p></div><div class="CF2lgtGWtYUYmTULoX44"><button type="button" class="st68fcLUUT0dNcuLLB2_ ffON2NH02oMAcqyoh2UU MQCbz04ET5EljRmK3YpQ CPXAhl7VTkj2dHDyAYAf" data-copycode="true" role="button" aria-label="Copy Code"><svg viewBox="0 0 16 16" fill="none" xmlns="http://www.w3.org/2000/svg"><path fill="currentColor" fill-rule="evenodd" clip-rule="evenodd" d="M9.975 1h.09a3.2 3.2 0 0 1 3.202 3.201v1.924a.754.754 0 0 1-.017.16l1.23 1.353A2 2 0 0 1 15 8.983V14a2 2 0 0 1-2 2H8a2 2 0 0 1-1.733-1H4.183a3.201 3.201 0 0 1-3.2-3.201V4.201a3.2 3.2 0 0 1 3.04-3.197A1.25 1.25 0 0 1 5.25 0h3.5c.604 0 1.109.43 1.225 1ZM4.249 2.5h-.066a1.7 1.7 0 0 0-1.7 1.701v7.598c0 .94.761 1.701 1.7 1.701H6V7a2 2 0 0 1 2-2h3.197c.195 0 .387.028.57.083v-.882A1.7 1.7 0 0 0 10.066 2.5H9.75c-.228.304-.591.5-1 .5h-3.5c-.41 0-.772-.196-1-.5ZM5 1.75v-.5A.25.25 0 0 1 5.25 1h3.5a.25.25 0 0 1 .25.25v.5a.25.25 0 0 1-.25.25h-3.5A.25.25 0 0 1 5 1.75ZM7.5 7a.5.5 0 0 1 .5-.5h3V9a1 1 0 0 0 1 1h1.5v4a.5.5 0 0 1-.5.5H8a.5.5 0 0 1-.5-.5V7Zm6 2v-.017a.5.5 0 0 0-.13-.336L12 7.14V9h1.5Z"></path></svg>Copy Code</button><button type="button" class="st68fcLUUT0dNcuLLB2_ WtfzoAXPoZC2mMqcexgL ffON2NH02oMAcqyoh2UU MQCbz04ET5EljRmK3YpQ GnLX_jUB3Jn3idluie7R"><svg fill="none" viewBox="0 0 24 24" xmlns="http://www.w3.org/2000/svg"><path fill="currentColor" fill-rule="evenodd" d="M20.618 4.214a1 1 0 0 1 .168 1.404l-11 14a1 1 0 0 1-1.554.022l-5-6a1 1 0 0 1 1.536-1.28l4.21 5.05L19.213 4.382a1 1 0 0 1 1.404-.168Z" clip-rule="evenodd"></path></svg>Copied</button></div></div><div class="mtDfw7oSa1WexjXyzs9y" style="color: var(--sds-color-text-01); font-family: var(--sds-font-family-monospace); direction: ltr; text-align: left; white-space: pre; word-spacing: normal; word-break: normal; font-size: var(--sds-font-size-label); line-height: 1.2em; tab-size: 4; hyphens: none; padding: var(--sds-space-x02, 8px) var(--sds-space-x04, 16px) var(--sds-space-x04, 16px); margin: 0px; overflow: auto; border: none; background: transparent;"><code class="language-bash" style="color: rgb(57, 58, 52); font-family: Consolas, "Bitstream Vera Sans Mono", "Courier New", Courier, monospace; direction: ltr; text-align: left; white-space: pre; word-spacing: normal; word-break: normal; font-size: 0.9em; line-height: 1.2em; tab-size: 4; hyphens: none;"><span class="token shebang" style="color: rgb(238, 153, 0); font-weight: bold;">#!/usr/bin/env bash</span><span> </span><span></span><span class="token builtin" style="color: rgb(43, 145, 175);">set</span><span> -euo pipefail </span> <span></span><span class="token" style="color: rgb(57, 58, 52);">sudo</span><span> </span><span class="token" style="color: rgb(57, 58, 52);">curl</span><span> -o /etc/yum.repos.d/adoptium.repo https://packages.adoptium.net/artifactory/rpm/centos/adoptium.repo </span><span></span><span class="token" style="color: rgb(57, 58, 52);">sudo</span><span> dnf </span><span class="token" style="color: rgb(57, 58, 52);">install</span><span> -y temurin-17-jdk </span> java -version </code></div></div></pre> <p>Example C — Generic tar.gz install (portable)</p> <pre><div class="XG2rBS5V967VhGTCEN1k"><div class="nHykNMmtaaTJMjgzStID"><div class="HsT0RHFbNELC00WicOi8"><i><svg width="16" height="16" fill="none" xmlns="http://www.w3.org/2000/svg"><path fill="currentColor" fill-rule="evenodd" clip-rule="evenodd" d="M15.434 7.51c.137.137.212.311.212.49a.694.694 0 0 1-.212.5l-3.54 3.5a.893.893 0 0 1-.277.18 1.024 1.024 0 0 1-.684.038.945.945 0 0 1-.302-.148.787.787 0 0 1-.213-.234.652.652 0 0 1-.045-.58.74.74 0 0 1 .175-.256l3.045-3-3.045-3a.69.69 0 0 1-.22-.55.723.723 0 0 1 .303-.52 1 1 0 0 1 .648-.186.962.962 0 0 1 .614.256l3.541 3.51Zm-12.281 0A.695.695 0 0 0 2.94 8a.694.694 0 0 0 .213.5l3.54 3.5a.893.893 0 0 0 .277.18 1.024 1.024 0 0 0 .684.038.945.945 0 0 0 .302-.148.788.788 0 0 0 .213-.234.651.651 0 0 0 .045-.58.74.74 0 0 0-.175-.256L4.994 8l3.045-3a.69.69 0 0 0 .22-.55.723.723 0 0 0-.303-.52 1 1 0 0 0-.648-.186.962.962 0 0 0-.615.256l-3.54 3.51Z"></path></svg></i><p class="li3asHIMe05JPmtJCytG wZ4JdaHxSAhGy1HoNVja cPy9QU4brI7VQXFNPEvF">bash</p></div><div class="CF2lgtGWtYUYmTULoX44"><button type="button" class="st68fcLUUT0dNcuLLB2_ ffON2NH02oMAcqyoh2UU MQCbz04ET5EljRmK3YpQ CPXAhl7VTkj2dHDyAYAf" data-copycode="true" role="button" aria-label="Copy Code"><svg viewBox="0 0 16 16" fill="none" xmlns="http://www.w3.org/2000/svg"><path fill="currentColor" fill-rule="evenodd" clip-rule="evenodd" d="M9.975 1h.09a3.2 3.2 0 0 1 3.202 3.201v1.924a.754.754 0 0 1-.017.16l1.23 1.353A2 2 0 0 1 15 8.983V14a2 2 0 0 1-2 2H8a2 2 0 0 1-1.733-1H4.183a3.201 3.201 0 0 1-3.2-3.201V4.201a3.2 3.2 0 0 1 3.04-3.197A1.25 1.25 0 0 1 5.25 0h3.5c.604 0 1.109.43 1.225 1ZM4.249 2.5h-.066a1.7 1.7 0 0 0-1.7 1.701v7.598c0 .94.761 1.701 1.7 1.701H6V7a2 2 0 0 1 2-2h3.197c.195 0 .387.028.57.083v-.882A1.7 1.7 0 0 0 10.066 2.5H9.75c-.228.304-.591.5-1 .5h-3.5c-.41 0-.772-.196-1-.5ZM5 1.75v-.5A.25.25 0 0 1 5.25 1h3.5a.25.25 0 0 1 .25.25v.5a.25.25 0 0 1-.25.25h-3.5A.25.25 0 0 1 5 1.75ZM7.5 7a.5.5 0 0 1 .5-.5h3V9a1 1 0 0 0 1 1h1.5v4a.5.5 0 0 1-.5.5H8a.5.5 0 0 1-.5-.5V7Zm6 2v-.017a.5.5 0 0 0-.13-.336L12 7.14V9h1.5Z"></path></svg>Copy Code</button><button type="button" class="st68fcLUUT0dNcuLLB2_ WtfzoAXPoZC2mMqcexgL ffON2NH02oMAcqyoh2UU MQCbz04ET5EljRmK3YpQ GnLX_jUB3Jn3idluie7R"><svg fill="none" viewBox="0 0 24 24" xmlns="http://www.w3.org/2000/svg"><path fill="currentColor" fill-rule="evenodd" d="M20.618 4.214a1 1 0 0 1 .168 1.404l-11 14a1 1 0 0 1-1.554.022l-5-6a1 1 0 0 1 1.536-1.28l4.21 5.05L19.213 4.382a1 1 0 0 1 1.404-.168Z" clip-rule="evenodd"></path></svg>Copied</button></div></div><div class="mtDfw7oSa1WexjXyzs9y" style="color: var(--sds-color-text-01); font-family: var(--sds-font-family-monospace); direction: ltr; text-align: left; white-space: pre; word-spacing: normal; word-break: normal; font-size: var(--sds-font-size-label); line-height: 1.2em; tab-size: 4; hyphens: none; padding: var(--sds-space-x02, 8px) var(--sds-space-x04, 16px) var(--sds-space-x04, 16px); margin: 0px; overflow: auto; border: none; background: transparent;"><code class="language-bash" style="color: rgb(57, 58, 52); font-family: Consolas, "Bitstream Vera Sans Mono", "Courier New", Courier, monospace; direction: ltr; text-align: left; white-space: pre; word-spacing: normal; word-break: normal; font-size: 0.9em; line-height: 1.2em; tab-size: 4; hyphens: none;"><span class="token shebang" style="color: rgb(238, 153, 0); font-weight: bold;">#!/usr/bin/env bash</span><span> </span><span></span><span class="token builtin" style="color: rgb(43, 145, 175);">set</span><span> -euo pipefail </span> <span></span><span class="token assign-left" style="color: rgb(54, 172, 170);">JDK_URL</span><span class="token" style="color: rgb(57, 58, 52);">=</span><span class="token" style="color: rgb(163, 21, 21);">"https://github.com/adoptium/temurin17-binaries/releases/latest/download/OpenJDK17U-jdk_x64_linux_hotspot_latest.tar.gz"</span><span> </span><span></span><span class="token assign-left" style="color: rgb(54, 172, 170);">DEST</span><span class="token" style="color: rgb(57, 58, 52);">=</span><span class="token" style="color: rgb(163, 21, 21);">"/usr/local/java"</span><span> </span><span></span><span class="token assign-left" style="color: rgb(54, 172, 170);">TMP</span><span class="token" style="color: rgb(57, 58, 52);">=</span><span class="token" style="color: rgb(163, 21, 21);">"/tmp/jdk.tar.gz"</span><span> </span> <span></span><span class="token" style="color: rgb(57, 58, 52);">sudo</span><span> </span><span class="token" style="color: rgb(57, 58, 52);">mkdir</span><span> -p </span><span class="token" style="color: rgb(163, 21, 21);">"</span><span class="token" style="color: rgb(54, 172, 170);">\)DEST” curl -L “\(JDK_URL</span><span class="token" style="color: rgb(163, 21, 21);">"</span><span> -o </span><span class="token" style="color: rgb(163, 21, 21);">"</span><span class="token" style="color: rgb(54, 172, 170);">\)TMP” sudo tar -xzf “\(TMP</span><span class="token" style="color: rgb(163, 21, 21);">"</span><span> -C </span><span class="token" style="color: rgb(163, 21, 21);">"</span><span class="token" style="color: rgb(54, 172, 170);">\)DEST” –strip-components=1 sudo ln -sfn “\(DEST</span><span class="token" style="color: rgb(163, 21, 21);">"</span><span> /usr/lib/jvm/java-17-temurin </span> <span></span><span class="token" style="color: rgb(0, 128, 0); font-style: italic;"># Set alternatives (Debian-style)</span><span> </span><span></span><span class="token" style="color: rgb(57, 58, 52);">sudo</span><span> update-alternatives --install /usr/bin/java java /usr/lib/jvm/java-17-temurin/bin/java </span><span class="token" style="color: rgb(54, 172, 170);">1</span><span> </span><span></span><span class="token" style="color: rgb(57, 58, 52);">sudo</span><span> update-alternatives --install /usr/bin/javac javac /usr/lib/jvm/java-17-temurin/bin/javac </span><span class="token" style="color: rgb(54, 172, 170);">1</span><span> </span> java -version </code></div></div></pre> <p>Notes:</p> <ul> <li>Adjust JDK_URL to the desired architecture/version.</li> <li>Use sudo; choose installation path per your environment.</li> </ul> <h2>Verification commands</h2> <ul> <li>java -version</li> <li>javac -version</li> <li>echo \)JAVA_HOME (Unix) or echo %JAVA_HOME% (Windows)On Windows PowerShell: [Environment]::GetEnvironmentVariable(“JAVA_HOME”,“Machine”) Unattended upgrades & idempotency tips
- Check if java or desired JAVAHOME already exists before installing; skip or replace accordingly.
- Use package-manager installs where possible for future updates.
- For tarball installs, use symlinked directory (/usr/lib/jvm/java-17-temurin) so updates swap targets atomically.
- Log output and return meaningful exit codes for automation pipelines.
Example: Ansible-friendly shell snippet
For use in configuration management, keep steps idempotent:
yaml
- name: Ensure temurin-17 is installed apt: name: temurin-17-jdk state: present when: ansible_facts[‘os_family’] == ‘Debian’Troubleshooting quick checklist
- Permission errors: run with appropriate privilege (sudo/Administrator).
- PATH not updated: log out or refresh environment (source profile or restart session).
- Architecture mismatch: download correct x86_64 vs aarch64 binary.
Summary
Use package managers for simplicity and updates; use silent MSI/EXE or tarball extraction for controlled installs. The provided batch, PowerShell, and shell scripts are ready to adapt—change URLs, versions, and install paths to match your environment.
Comments
Leave a Reply