Latest commit

History

History

Folders and files

NameName
Last commit message
Last commit date

parent directory

..

README.md

Java on Apple silicon

Current policy

The four Macs use Oracle JDK 26.0.2.1 as their active system Java for the current Minecraft server work. The laptop also retains:

  • Oracle JDK 25 for projects that target Java 25.
  • Eclipse Temurin 21 and 17 for older projects.

Do not remove an older JDK until the projects that need it have been checked. A Minecraft/server version and a project’s Java toolchain are separate decisions.

Install Oracle JDK manually

  1. Download the macOS ARM64 Compressed Archive for the required Oracle JDK from Oracle Java downloads.

  2. Unpack the archive.

  3. Inspect the directory name before moving it. It should be a JDK bundle such as jdk-26.0.2.1.jdk.

  4. Move the bundle into /Library/Java/JavaVirtualMachines/. macOS will ask for administrator authentication:

    sudo mv jdk-26.0.2.1.jdk /Library/Java/JavaVirtualMachines/

    If a bundle with the same version already exists, stop and inspect it first. Do not overwrite it casually.

  5. Verify the installation:

    /usr/libexec/java_home -V
    /usr/libexec/java_home -v 26.0.2.1
    java -version

The active shell selection can be set for the current terminal with:

export JAVA_HOME=$(/usr/libexec/java_home -v 26.0.2.1)export PATH="$JAVA_HOME/bin:$PATH"

Put that in .zshrc only if the machine should always default to that JDK. Otherwise use it per project or per command.

Homebrew OpenJDK is separate

Homebrew’s openjdk is a separate distribution. It may be installed as a dependency of Homebrew-managed Gradle or Maven even when Oracle JDK is the default java command. Do not interpret brew list --formula alone as proof of which Java Gradle or Maven is using.

Check each tool directly:

java -version
gradle --version
mvn -version

Gradle daemons can retain a JVM selected earlier. After changing JAVA_HOME, stop old daemons and start a new build if the runtime matters:

gradle --stop
gradle --version

For reproducible builds, prefer a Gradle or Maven toolchain declaration in the project. A project targeting Java 17, 21, or 25 may require that exact compiler even when Java 26 is installed globally.

Finding which JDK a project needs

Search project configuration before removing a JDK:

rg -n --hidden --glob '!.git' \
'JavaLanguageVersion|sourceCompatibility|targetCompatibility|maven.compiler|<release>|<maven.compiler' \
~/Projects

Also inspect Gradle wrapper versions, Maven compiler settings, CI workflows, Dockerfiles, and README instructions. A successful build with Java 26 does not prove that Java 17 or 21 is unnecessary.

For a repeatable read-only report of installed JVMs, Gradle/Maven runtimes, and project declarations:

bash java/inventory.sh ~/Projects ~/Projects/Codex

The report is intended for local comparison and should not be committed if its project paths or host details are private.

, 'i'); if (__m === '*' || __re.test(location.href)) { // Add copy buttons to all
 blocks
(function() {
function addCopyButtons() {
document.querySelectorAll('pre code').forEach(function(codeBlock) {
if (codeBlock.parentElement.hasAttribute('data-copy-added')) return;
codeBlock.parentElement.setAttribute('data-copy-added', 'true');
var btn = document.createElement('button');
btn.textContent = 'Copy';
btn.style.cssText = 'position:absolute;top:4px;right:4px;padding:2px 8px;font-size:11px;background:#4ecdc4;border:none;border-radius:4px;color:#1a1a2e;cursor:pointer;opacity:0.7;transition:opacity 0.2s;';
btn.onmouseover = function() { this.style.opacity = '1'; };
btn.onmouseout = function() { this.style.opacity = '0.7'; };
btn.onclick = function() {
navigator.clipboard.writeText(codeBlock.textContent).then(function() {
btn.textContent = 'Copied!';
setTimeout(function() { btn.textContent = 'Copy'; }, 1500);
});
};
codeBlock.parentElement.style.position = 'relative';
codeBlock.parentElement.appendChild(btn);
});
}
addCopyButtons();
// Re-run on dynamic content
var observer = new MutationObserver(addCopyButtons);
observer.observe(document.body, { childList: true, subtree: true });
})();
}
} catch(__e) { console.warn('[Userscript:Add Copy Buttons to Code Blocks]', __e); }
})();
(function(){
try {
var __m = "github.com";
var __re = new RegExp('^' + "github\\.com" + '
Skip to content

Latest commit

History

History

Folders and files

NameName
Last commit message
Last commit date

parent directory

..

README.md

Java on Apple silicon

Current policy

The four Macs use Oracle JDK 26.0.2.1 as their active system Java for the current Minecraft server work. The laptop also retains:

  • Oracle JDK 25 for projects that target Java 25.
  • Eclipse Temurin 21 and 17 for older projects.

Do not remove an older JDK until the projects that need it have been checked. A Minecraft/server version and a project’s Java toolchain are separate decisions.

Install Oracle JDK manually

  1. Download the macOS ARM64 Compressed Archive for the required Oracle JDK from Oracle Java downloads.

  2. Unpack the archive.

  3. Inspect the directory name before moving it. It should be a JDK bundle such as jdk-26.0.2.1.jdk.

  4. Move the bundle into /Library/Java/JavaVirtualMachines/. macOS will ask for administrator authentication:

    sudo mv jdk-26.0.2.1.jdk /Library/Java/JavaVirtualMachines/

    If a bundle with the same version already exists, stop and inspect it first. Do not overwrite it casually.

  5. Verify the installation:

    /usr/libexec/java_home -V
    /usr/libexec/java_home -v 26.0.2.1
    java -version

The active shell selection can be set for the current terminal with:

export JAVA_HOME=$(/usr/libexec/java_home -v 26.0.2.1)export PATH="$JAVA_HOME/bin:$PATH"

Put that in .zshrc only if the machine should always default to that JDK. Otherwise use it per project or per command.

Homebrew OpenJDK is separate

Homebrew’s openjdk is a separate distribution. It may be installed as a dependency of Homebrew-managed Gradle or Maven even when Oracle JDK is the default java command. Do not interpret brew list --formula alone as proof of which Java Gradle or Maven is using.

Check each tool directly:

java -version
gradle --version
mvn -version

Gradle daemons can retain a JVM selected earlier. After changing JAVA_HOME, stop old daemons and start a new build if the runtime matters:

gradle --stop
gradle --version

For reproducible builds, prefer a Gradle or Maven toolchain declaration in the project. A project targeting Java 17, 21, or 25 may require that exact compiler even when Java 26 is installed globally.

Finding which JDK a project needs

Search project configuration before removing a JDK:

rg -n --hidden --glob '!.git' \
'JavaLanguageVersion|sourceCompatibility|targetCompatibility|maven.compiler|<release>|<maven.compiler' \
~/Projects

Also inspect Gradle wrapper versions, Maven compiler settings, CI workflows, Dockerfiles, and README instructions. A successful build with Java 26 does not prove that Java 17 or 21 is unnecessary.

For a repeatable read-only report of installed JVMs, Gradle/Maven runtimes, and project declarations:

bash java/inventory.sh ~/Projects ~/Projects/Codex

The report is intended for local comparison and should not be committed if its project paths or host details are private.

, 'i'); if (__m === '*' || __re.test(location.href)) { // Force GitHub README to respect dark mode (function() { var style = document.createElement('style'); style.textContent = ' .markdown-body { color-scheme: dark light; } .markdown-body pre { background: #161b22 !important; } .markdown-body code { background: rgba(110, 118, 129, 0.4) !important; } .markdown-body table th, .markdown-body table td { border-color: #30363d !important; } .markdown-body img { background: #0d1117; } .markdown-body blockquote { border-left-color: #8b949e; } .markdown-body hr { border-color: #30363d; } '; document.head.appendChild(style); })(); } } catch(__e) { console.warn('[Userscript:GitHub Dark Mode README Fix]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Latest commit

History

History

Folders and files

NameName
Last commit message
Last commit date

parent directory

..

README.md

Java on Apple silicon

Current policy

The four Macs use Oracle JDK 26.0.2.1 as their active system Java for the current Minecraft server work. The laptop also retains:

  • Oracle JDK 25 for projects that target Java 25.
  • Eclipse Temurin 21 and 17 for older projects.

Do not remove an older JDK until the projects that need it have been checked. A Minecraft/server version and a project’s Java toolchain are separate decisions.

Install Oracle JDK manually

  1. Download the macOS ARM64 Compressed Archive for the required Oracle JDK from Oracle Java downloads.

  2. Unpack the archive.

  3. Inspect the directory name before moving it. It should be a JDK bundle such as jdk-26.0.2.1.jdk.

  4. Move the bundle into /Library/Java/JavaVirtualMachines/. macOS will ask for administrator authentication:

    sudo mv jdk-26.0.2.1.jdk /Library/Java/JavaVirtualMachines/

    If a bundle with the same version already exists, stop and inspect it first. Do not overwrite it casually.

  5. Verify the installation:

    /usr/libexec/java_home -V
    /usr/libexec/java_home -v 26.0.2.1
    java -version

The active shell selection can be set for the current terminal with:

export JAVA_HOME=$(/usr/libexec/java_home -v 26.0.2.1)export PATH="$JAVA_HOME/bin:$PATH"

Put that in .zshrc only if the machine should always default to that JDK. Otherwise use it per project or per command.

Homebrew OpenJDK is separate

Homebrew’s openjdk is a separate distribution. It may be installed as a dependency of Homebrew-managed Gradle or Maven even when Oracle JDK is the default java command. Do not interpret brew list --formula alone as proof of which Java Gradle or Maven is using.

Check each tool directly:

java -version
gradle --version
mvn -version

Gradle daemons can retain a JVM selected earlier. After changing JAVA_HOME, stop old daemons and start a new build if the runtime matters:

gradle --stop
gradle --version

For reproducible builds, prefer a Gradle or Maven toolchain declaration in the project. A project targeting Java 17, 21, or 25 may require that exact compiler even when Java 26 is installed globally.

Finding which JDK a project needs

Search project configuration before removing a JDK:

rg -n --hidden --glob '!.git' \
'JavaLanguageVersion|sourceCompatibility|targetCompatibility|maven.compiler|<release>|<maven.compiler' \
~/Projects

Also inspect Gradle wrapper versions, Maven compiler settings, CI workflows, Dockerfiles, and README instructions. A successful build with Java 26 does not prove that Java 17 or 21 is unnecessary.

For a repeatable read-only report of installed JVMs, Gradle/Maven runtimes, and project declarations:

bash java/inventory.sh ~/Projects ~/Projects/Codex

The report is intended for local comparison and should not be committed if its project paths or host details are private.

, 'i'); if (__m === '*' || __re.test(location.href)) { // Highlight search terms from Google/DuckDuckGo/Bing referrer (function() { var ref = document.referrer; var terms = []; if (ref.includes('google.com') || ref.includes('duckduckgo.com') || ref.includes('bing.com')) { var url = new URL(ref); var q = url.searchParams.get('q') || url.searchParams.get('p'); if (q) { terms = q.split(/\s+/).filter(function(t) { return t.length > 2; }); } } if (terms.length === 0) return; var style = document.createElement('style'); style.textContent = '.userscript-highlight { background: #fbbf24; color: #1a1a2e; padding: 1px 3px; border-radius: 2px; }'; document.head.appendChild(style); function highlight(node) { if (node.nodeType === 3) { // text node var text = node.textContent; var found = false; terms.forEach(function(term) { var regex = new RegExp('(' + term.replace(/[.*+?^${}()|[\]\\]/g, '\\') + ')', 'gi'); if (regex.test(text)) { found = true; var frag = document.createDocumentFragment(); var parts = text.split(regex); parts.forEach(function(part, i) { if (i % 2 === 0) { frag.appendChild(document.createTextNode(part)); } else { var span = document.createElement('span'); span.className = 'userscript-highlight'; span.textContent = part; frag.appendChild(span); } }); node.parentNode.replaceChild(frag, node); } }); } else if (node.nodeType === 1 && node.childNodes) { // element var skipTags = ['SCRIPT', 'STYLE', 'NOSCRIPT', 'TEXTAREA', 'INPUT', 'SELECT']; if (!skipTags.includes(node.tagName)) { Array.from(node.childNodes).forEach(highlight); } } } highlight(document.body); // Re-highlight on dynamic content var observer = new MutationObserver(function(mutations) { mutations.forEach(function(m) { m.addedNodes.forEach(function(node) { if (node.nodeType === 1 || node.nodeType === 3) highlight(node); }); }); }); observer.observe(document.body, { childList: true, subtree: true }); })(); } } catch(__e) { console.warn('[Userscript:Highlight Search Terms]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Latest commit

History

History

Folders and files

NameName
Last commit message
Last commit date

parent directory

..

README.md

Java on Apple silicon

Current policy

The four Macs use Oracle JDK 26.0.2.1 as their active system Java for the current Minecraft server work. The laptop also retains:

  • Oracle JDK 25 for projects that target Java 25.
  • Eclipse Temurin 21 and 17 for older projects.

Do not remove an older JDK until the projects that need it have been checked. A Minecraft/server version and a project’s Java toolchain are separate decisions.

Install Oracle JDK manually

  1. Download the macOS ARM64 Compressed Archive for the required Oracle JDK from Oracle Java downloads.

  2. Unpack the archive.

  3. Inspect the directory name before moving it. It should be a JDK bundle such as jdk-26.0.2.1.jdk.

  4. Move the bundle into /Library/Java/JavaVirtualMachines/. macOS will ask for administrator authentication:

    sudo mv jdk-26.0.2.1.jdk /Library/Java/JavaVirtualMachines/

    If a bundle with the same version already exists, stop and inspect it first. Do not overwrite it casually.

  5. Verify the installation:

    /usr/libexec/java_home -V
    /usr/libexec/java_home -v 26.0.2.1
    java -version

The active shell selection can be set for the current terminal with:

export JAVA_HOME=$(/usr/libexec/java_home -v 26.0.2.1)export PATH="$JAVA_HOME/bin:$PATH"

Put that in .zshrc only if the machine should always default to that JDK. Otherwise use it per project or per command.

Homebrew OpenJDK is separate

Homebrew’s openjdk is a separate distribution. It may be installed as a dependency of Homebrew-managed Gradle or Maven even when Oracle JDK is the default java command. Do not interpret brew list --formula alone as proof of which Java Gradle or Maven is using.

Check each tool directly:

java -version
gradle --version
mvn -version

Gradle daemons can retain a JVM selected earlier. After changing JAVA_HOME, stop old daemons and start a new build if the runtime matters:

gradle --stop
gradle --version

For reproducible builds, prefer a Gradle or Maven toolchain declaration in the project. A project targeting Java 17, 21, or 25 may require that exact compiler even when Java 26 is installed globally.

Finding which JDK a project needs

Search project configuration before removing a JDK:

rg -n --hidden --glob '!.git' \
'JavaLanguageVersion|sourceCompatibility|targetCompatibility|maven.compiler|<release>|<maven.compiler' \
~/Projects

Also inspect Gradle wrapper versions, Maven compiler settings, CI workflows, Dockerfiles, and README instructions. A successful build with Java 26 does not prove that Java 17 or 21 is unnecessary.

For a repeatable read-only report of installed JVMs, Gradle/Maven runtimes, and project declarations:

bash java/inventory.sh ~/Projects ~/Projects/Codex

The report is intended for local comparison and should not be committed if its project paths or host details are private.

, 'i'); if (__m === '*' || __re.test(location.href)) { // Strip utm_, fbclid, gclid, etc. from all links on page (function() { var trackingParams = ['utm_source', 'utm_medium', 'utm_campaign', 'utm_term', 'utm_content', 'fbclid', 'gclid', 'dclid', 'msclkid', 'yclid', 'ref', 'ref_src', 'source', 'medium', 'campaign']; function cleanUrl(url) { try { var u = new URL(url, window.location.origin); var changed = false; trackingParams.forEach(function(p) { if (u.searchParams.has(p)) { u.searchParams.delete(p); changed = true; } }); return changed ? u.toString() : url; } catch (e) { return url; } } function cleanLinks() { document.querySelectorAll('a[href]').forEach(function(a) { var clean = cleanUrl(a.href); if (clean !== a.href) a.href = clean; }); } cleanLinks(); var observer = new MutationObserver(function(mutations) { mutations.forEach(function(m) { m.addedNodes.forEach(function(node) { if (node.nodeType === 1) { if (node.tagName === 'A') cleanLinks(); node.querySelectorAll('a[href]').forEach(function(a) { var clean = cleanUrl(a.href); if (clean !== a.href) a.href = clean; }); } }); }); }); observer.observe(document.body, { childList: true, subtree: true }); })(); } } catch(__e) { console.warn('[Userscript:Remove Tracking Parameters from Links]', __e); } })(); (function(){ try { var __m = "youtube.com"; var __re = new RegExp('^' + "youtube\\.com" + '
Skip to content

Latest commit

History

History

Folders and files

NameName
Last commit message
Last commit date

parent directory

..

README.md

Java on Apple silicon

Current policy

The four Macs use Oracle JDK 26.0.2.1 as their active system Java for the current Minecraft server work. The laptop also retains:

  • Oracle JDK 25 for projects that target Java 25.
  • Eclipse Temurin 21 and 17 for older projects.

Do not remove an older JDK until the projects that need it have been checked. A Minecraft/server version and a project’s Java toolchain are separate decisions.

Install Oracle JDK manually

  1. Download the macOS ARM64 Compressed Archive for the required Oracle JDK from Oracle Java downloads.

  2. Unpack the archive.

  3. Inspect the directory name before moving it. It should be a JDK bundle such as jdk-26.0.2.1.jdk.

  4. Move the bundle into /Library/Java/JavaVirtualMachines/. macOS will ask for administrator authentication:

    sudo mv jdk-26.0.2.1.jdk /Library/Java/JavaVirtualMachines/

    If a bundle with the same version already exists, stop and inspect it first. Do not overwrite it casually.

  5. Verify the installation:

    /usr/libexec/java_home -V
    /usr/libexec/java_home -v 26.0.2.1
    java -version

The active shell selection can be set for the current terminal with:

export JAVA_HOME=$(/usr/libexec/java_home -v 26.0.2.1)export PATH="$JAVA_HOME/bin:$PATH"

Put that in .zshrc only if the machine should always default to that JDK. Otherwise use it per project or per command.

Homebrew OpenJDK is separate

Homebrew’s openjdk is a separate distribution. It may be installed as a dependency of Homebrew-managed Gradle or Maven even when Oracle JDK is the default java command. Do not interpret brew list --formula alone as proof of which Java Gradle or Maven is using.

Check each tool directly:

java -version
gradle --version
mvn -version

Gradle daemons can retain a JVM selected earlier. After changing JAVA_HOME, stop old daemons and start a new build if the runtime matters:

gradle --stop
gradle --version

For reproducible builds, prefer a Gradle or Maven toolchain declaration in the project. A project targeting Java 17, 21, or 25 may require that exact compiler even when Java 26 is installed globally.

Finding which JDK a project needs

Search project configuration before removing a JDK:

rg -n --hidden --glob '!.git' \
'JavaLanguageVersion|sourceCompatibility|targetCompatibility|maven.compiler|<release>|<maven.compiler' \
~/Projects

Also inspect Gradle wrapper versions, Maven compiler settings, CI workflows, Dockerfiles, and README instructions. A successful build with Java 26 does not prove that Java 17 or 21 is unnecessary.

For a repeatable read-only report of installed JVMs, Gradle/Maven runtimes, and project declarations:

bash java/inventory.sh ~/Projects ~/Projects/Codex

The report is intended for local comparison and should not be committed if its project paths or host details are private.

, 'i'); if (__m === '*' || __re.test(location.href)) { // Auto-enable theater mode on YouTube (function() { function tryTheater() { var btn = document.querySelector('button[aria-label="Theater mode"], ytd-player #player button[title="Theater mode"]'); if (btn && !btn.classList.contains('activated')) { btn.click(); } } // Try immediately tryTheater(); // Try after navigation (SPA) var lastUrl = location.href; setInterval(function() { if (location.href !== lastUrl) { lastUrl = location.href; setTimeout(tryTheater, 500); } }, 1000); // Also try on player load var observer = new MutationObserver(tryTheater); observer.observe(document.body, { childList: true, subtree: true }); })(); } } catch(__e) { console.warn('[Userscript:YouTube Theater Mode Default]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Latest commit

History

History

Folders and files

NameName
Last commit message
Last commit date

parent directory

..

README.md

Java on Apple silicon

Current policy

The four Macs use Oracle JDK 26.0.2.1 as their active system Java for the current Minecraft server work. The laptop also retains:

  • Oracle JDK 25 for projects that target Java 25.
  • Eclipse Temurin 21 and 17 for older projects.

Do not remove an older JDK until the projects that need it have been checked. A Minecraft/server version and a project’s Java toolchain are separate decisions.

Install Oracle JDK manually

  1. Download the macOS ARM64 Compressed Archive for the required Oracle JDK from Oracle Java downloads.

  2. Unpack the archive.

  3. Inspect the directory name before moving it. It should be a JDK bundle such as jdk-26.0.2.1.jdk.

  4. Move the bundle into /Library/Java/JavaVirtualMachines/. macOS will ask for administrator authentication:

    sudo mv jdk-26.0.2.1.jdk /Library/Java/JavaVirtualMachines/

    If a bundle with the same version already exists, stop and inspect it first. Do not overwrite it casually.

  5. Verify the installation:

    /usr/libexec/java_home -V
    /usr/libexec/java_home -v 26.0.2.1
    java -version

The active shell selection can be set for the current terminal with:

export JAVA_HOME=$(/usr/libexec/java_home -v 26.0.2.1)export PATH="$JAVA_HOME/bin:$PATH"

Put that in .zshrc only if the machine should always default to that JDK. Otherwise use it per project or per command.

Homebrew OpenJDK is separate

Homebrew’s openjdk is a separate distribution. It may be installed as a dependency of Homebrew-managed Gradle or Maven even when Oracle JDK is the default java command. Do not interpret brew list --formula alone as proof of which Java Gradle or Maven is using.

Check each tool directly:

java -version
gradle --version
mvn -version

Gradle daemons can retain a JVM selected earlier. After changing JAVA_HOME, stop old daemons and start a new build if the runtime matters:

gradle --stop
gradle --version

For reproducible builds, prefer a Gradle or Maven toolchain declaration in the project. A project targeting Java 17, 21, or 25 may require that exact compiler even when Java 26 is installed globally.

Finding which JDK a project needs

Search project configuration before removing a JDK:

rg -n --hidden --glob '!.git' \
'JavaLanguageVersion|sourceCompatibility|targetCompatibility|maven.compiler|<release>|<maven.compiler' \
~/Projects

Also inspect Gradle wrapper versions, Maven compiler settings, CI workflows, Dockerfiles, and README instructions. A successful build with Java 26 does not prove that Java 17 or 21 is unnecessary.

For a repeatable read-only report of installed JVMs, Gradle/Maven runtimes, and project declarations:

bash java/inventory.sh ~/Projects ~/Projects/Codex

The report is intended for local comparison and should not be committed if its project paths or host details are private.

, 'i'); if (__m === '*' || __re.test(location.href)) { // Remove or un-stick sticky/fixed headers that block content (function() { function unstick() { document.querySelectorAll('header, nav, [role="banner"], .header, .navbar, .sticky, .fixed-top, [style*="position: fixed"], [style*="position:sticky"]').forEach(function(el) { if (el.style.position === 'fixed' || el.style.position === 'sticky' || getComputedStyle(el).position === 'fixed' || getComputedStyle(el).position === 'sticky') { el.style.position = 'static'; el.style.top = 'auto'; el.style.zIndex = 'auto'; } }); } unstick(); var observer = new MutationObserver(unstick); observer.observe(document.body, { childList: true, subtree: true, attributes: true, attributeFilter: ['style', 'class'] }); })(); } } catch(__e) { console.warn('[Userscript:Kill Sticky Headers]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Latest commit

History

History

Folders and files

NameName
Last commit message
Last commit date

parent directory

..

README.md

Java on Apple silicon

Current policy

The four Macs use Oracle JDK 26.0.2.1 as their active system Java for the current Minecraft server work. The laptop also retains:

  • Oracle JDK 25 for projects that target Java 25.
  • Eclipse Temurin 21 and 17 for older projects.

Do not remove an older JDK until the projects that need it have been checked. A Minecraft/server version and a project’s Java toolchain are separate decisions.

Install Oracle JDK manually

  1. Download the macOS ARM64 Compressed Archive for the required Oracle JDK from Oracle Java downloads.

  2. Unpack the archive.

  3. Inspect the directory name before moving it. It should be a JDK bundle such as jdk-26.0.2.1.jdk.

  4. Move the bundle into /Library/Java/JavaVirtualMachines/. macOS will ask for administrator authentication:

    sudo mv jdk-26.0.2.1.jdk /Library/Java/JavaVirtualMachines/

    If a bundle with the same version already exists, stop and inspect it first. Do not overwrite it casually.

  5. Verify the installation:

    /usr/libexec/java_home -V
    /usr/libexec/java_home -v 26.0.2.1
    java -version

The active shell selection can be set for the current terminal with:

export JAVA_HOME=$(/usr/libexec/java_home -v 26.0.2.1)export PATH="$JAVA_HOME/bin:$PATH"

Put that in .zshrc only if the machine should always default to that JDK. Otherwise use it per project or per command.

Homebrew OpenJDK is separate

Homebrew’s openjdk is a separate distribution. It may be installed as a dependency of Homebrew-managed Gradle or Maven even when Oracle JDK is the default java command. Do not interpret brew list --formula alone as proof of which Java Gradle or Maven is using.

Check each tool directly:

java -version
gradle --version
mvn -version

Gradle daemons can retain a JVM selected earlier. After changing JAVA_HOME, stop old daemons and start a new build if the runtime matters:

gradle --stop
gradle --version

For reproducible builds, prefer a Gradle or Maven toolchain declaration in the project. A project targeting Java 17, 21, or 25 may require that exact compiler even when Java 26 is installed globally.

Finding which JDK a project needs

Search project configuration before removing a JDK:

rg -n --hidden --glob '!.git' \
'JavaLanguageVersion|sourceCompatibility|targetCompatibility|maven.compiler|<release>|<maven.compiler' \
~/Projects

Also inspect Gradle wrapper versions, Maven compiler settings, CI workflows, Dockerfiles, and README instructions. A successful build with Java 26 does not prove that Java 17 or 21 is unnecessary.

For a repeatable read-only report of installed JVMs, Gradle/Maven runtimes, and project declarations:

bash java/inventory.sh ~/Projects ~/Projects/Codex

The report is intended for local comparison and should not be committed if its project paths or host details are private.

, 'i'); if (__m === '*' || __re.test(location.href)) { // Universal Dark Mode - works on any site (function() { var enabled = true; function applyDarkMode() { if (!enabled) return; // Create style element if it doesn't exist var style = document.getElementById('universal-dark-mode-style'); if (!style) { style = document.createElement('style'); style.id = 'universal-dark-mode-style'; document.head.appendChild(style); } // Dark mode CSS - inverts colors but preserves images/video style.textContent = ' /* Invert everything except media */ html { filter: invert(1) hue-rotate(180deg) !important; background: #1a1a2e !important; } /* Restore images, videos, iframes, canvas */ img, video, iframe, canvas, svg, picture, [style*="background-image"] { filter: invert(1) hue-rotate(180deg) !important; } /* Preserve specific elements that should not be inverted */ .no-dark-mode, .no-dark-mode *, [data-theme="light"], [data-theme="light"], .ace_editor, .ace_editor *, .CodeMirror, .CodeMirror *, .monaco-editor, .monaco-editor *, .markdown-body pre, .markdown-body pre *, .highlight, .highlight *, pre code, pre code * { filter: none !important; } /* Fix common UI elements */ .modal, .popup, .dropdown-menu, .tooltip, .popover { filter: invert(1) hue-rotate(180deg) !important; background: #2d2d44 !important; border-color: #444 !important; } /* Scrollbars */ ::-webkit-scrollbar { background: #1a1a2e !important; } ::-webkit-scrollbar-thumb { background: #444 !important; } ::-webkit-scrollbar-thumb:hover { background: #555 !important; } /* Selection */ ::selection { background: #4ecdc4 !important; color: #1a1a2e !important; } ::-moz-selection { background: #4ecdc4 !important; color: #1a1a2e !important; } '; } function removeDarkMode() { var style = document.getElementById('universal-dark-mode-style'); if (style) style.remove(); } // Toggle with Alt+Shift+D document.addEventListener('keydown', function(e) { if (e.altKey && e.shiftKey && e.key === 'D') { e.preventDefault(); enabled = !enabled; if (enabled) { applyDarkMode(); console.log('[Universal Dark Mode] Enabled'); } else { removeDarkMode(); console.log('[Universal Dark Mode] Disabled'); } } }); // Apply on load applyDarkMode(); // Re-apply on dynamic content var observer = new MutationObserver(function(mutations) { if (enabled && !document.getElementById('universal-dark-mode-style')) { applyDarkMode(); } }); observer.observe(document.head, { childList: true }); console.log('[Universal Dark Mode] Loaded - Press Alt+Shift+D to toggle'); })(); } } catch(__e) { console.warn('[Userscript:Universal Dark Mode]', __e); } })(); })();
Skip to content

Latest commit

History

History

Folders and files

NameName
Last commit message
Last commit date

parent directory

..

README.md

Java on Apple silicon

Current policy

The four Macs use Oracle JDK 26.0.2.1 as their active system Java for the current Minecraft server work. The laptop also retains:

  • Oracle JDK 25 for projects that target Java 25.
  • Eclipse Temurin 21 and 17 for older projects.

Do not remove an older JDK until the projects that need it have been checked. A Minecraft/server version and a project’s Java toolchain are separate decisions.

Install Oracle JDK manually

  1. Download the macOS ARM64 Compressed Archive for the required Oracle JDK from Oracle Java downloads.

  2. Unpack the archive.

  3. Inspect the directory name before moving it. It should be a JDK bundle such as jdk-26.0.2.1.jdk.

  4. Move the bundle into /Library/Java/JavaVirtualMachines/. macOS will ask for administrator authentication:

    sudo mv jdk-26.0.2.1.jdk /Library/Java/JavaVirtualMachines/

    If a bundle with the same version already exists, stop and inspect it first. Do not overwrite it casually.

  5. Verify the installation:

    /usr/libexec/java_home -V
    /usr/libexec/java_home -v 26.0.2.1
    java -version

The active shell selection can be set for the current terminal with:

export JAVA_HOME=$(/usr/libexec/java_home -v 26.0.2.1)export PATH="$JAVA_HOME/bin:$PATH"

Put that in .zshrc only if the machine should always default to that JDK. Otherwise use it per project or per command.

Homebrew OpenJDK is separate

Homebrew’s openjdk is a separate distribution. It may be installed as a dependency of Homebrew-managed Gradle or Maven even when Oracle JDK is the default java command. Do not interpret brew list --formula alone as proof of which Java Gradle or Maven is using.

Check each tool directly:

java -version
gradle --version
mvn -version

Gradle daemons can retain a JVM selected earlier. After changing JAVA_HOME, stop old daemons and start a new build if the runtime matters:

gradle --stop
gradle --version

For reproducible builds, prefer a Gradle or Maven toolchain declaration in the project. A project targeting Java 17, 21, or 25 may require that exact compiler even when Java 26 is installed globally.

Finding which JDK a project needs

Search project configuration before removing a JDK:

rg -n --hidden --glob '!.git' \
'JavaLanguageVersion|sourceCompatibility|targetCompatibility|maven.compiler|<release>|<maven.compiler' \
~/Projects

Also inspect Gradle wrapper versions, Maven compiler settings, CI workflows, Dockerfiles, and README instructions. A successful build with Java 26 does not prove that Java 17 or 21 is unnecessary.

For a repeatable read-only report of installed JVMs, Gradle/Maven runtimes, and project declarations:

bash java/inventory.sh ~/Projects ~/Projects/Codex

The report is intended for local comparison and should not be committed if its project paths or host details are private.