Desde que as pessoas aprenderam que o Windows é um sistema operacional multiusuários e que, por segurança, não é "legal" dar privilégios de administrador para qualquer um que usa o PC, inclusive para o "dono", alguns pequenos desafios surgiram no desenvolvimento de software. Se os ambientes modernos como React e Vue, por exemplo, lhe dão de forma transparente com isso, o mesmo não acontece com ambientes mais tradicionais como o Java. Ainda mais se precisamos de várias versões diferentes deste ambiente.
A forma mais prática de ter múltiplas versões do JDK no Windows 10/11, sem privilégios administrativos no Windows, é utilizando uma abordagem baseada em descompactação e variáveis de ambiente ou uma ferramenta como o SDKMAN! para Windows (embora o SDKMAN! em si exija um ambiente que pode ser um pouco mais complexo de configurar sem privilégios).
Uma abordagem mais direta e que não requer absolutamente nenhum privilégio administrativo, apenas a capacidade de descompactar arquivos e modificar variáveis de ambiente do usuário é a seguinte:
Vá ao site oficial da Oracle (Oracle JDK) ou OpenJDK (como Adoptium/Eclipse Temurin, Azul Zulu, Amazon Corretto, etc.) e baixe os arquivos ZIP ou TAR.GZ (não os instaladores .exe ou .msi) das versões do JDK que você deseja. Lembre-se de escolher a arquitetura correta (geralmente x64 para a maioria dos PCs modernos).
Crie uma pasta em um local de sua escolha onde você tenha permissão de escrita, por exemplo: C:\Users\SeuUsuario\JDKs.
Dentro dessa pasta, crie subpastas para cada versão do JDK, por exemplo:
C:\Users\SeuUsuario\JDKs\jdk-11
C:\Users\SeuUsuario\JDKs\jdk-17
C:\Users\SeuUsuario\JDKs\jdk-21
Descompacte o conteúdo de cada arquivo ZIP/TAR.GZ na sua respectiva pasta. A pasta descompactada deve conter as subpastas bin, lib, etc. (Ex: C:\Users\SeuUsuario\JDKs\jdk-17\bin).
Lembre-se de trocar "SeuUsuario" pelo seu nome de usuário dentro da pasta "Users" do sistema.
Pressione Win + R, digite sysdm.cpl e pressione Enter;
Na janela "Propriedades do Sistema", vá para a aba "Avançado" e clique em "Variáveis de Ambiente...";
Na seção "Variáveis de usuário para SeuUsuario":
Criar uma variável JAVA_HOME para cada versão, seguindo os passos:
Clique em "Novo...".
Nome da variável: JAVA_HOME_11 (ou JAVA_HOME_17, JAVA_HOME_21, etc.).
Valor da variável: O caminho completo para a pasta raiz do seu JDK (Ex: C:\Users\SeuUsuario\JDKs\jdk-11).
Repita para todas as versões que você descompactou.
Modificar a variável Path do usuário:
Localize a variável Path na seção "Variáveis de usuário".
Clique em "Editar...".
Clique em "Novo" e adicione %JAVA_HOME%\bin (este será o seu JAVA_HOME "ativo").
Mova esta entrada para o topo da lista para garantir que ela seja a primeira a ser verificada.
Você também pode adicionar as outras versões, como %JAVA_HOME_17%\bin e %JAVA_HOME_21%\bin, mas é crucial que o %JAVA_HOME%\bin esteja no topo se você quiser que ele seja o padrão ao abrir um novo terminal.
Para alternar entre as versões, você precisará alterar o valor da variável de ambiente JAVA_HOME para apontar para a versão desejada (ex: C:\Users\SeuUsuario\JDKs\jdk-17). Para que a mudança tenha efeito, você precisará abrir um novo terminal (Prompt de Comando ou PowerShell) ou reiniciar seu IDE.
Uma forma prática de fazer isso sem ir sempre nas configurações do sistema é criar scripts .bat simples como:
:: Exemplo de script para definir JDK 17
:: Nome do arquivo: set_jdk17.bat
@echo off
set JAVA_HOME=C:\Users\SeuUsuario\JDKs\jdk-17
echo JAVA_HOME definido para: %JAVA_HOME%
:: Você pode adicionar "cmd" ou "powershell" aqui para abrir um novo terminal com a variável definida
Ou, para o PowerShell:
# Exemplo de script para definir JDK 17
# Nome do arquivo: set-jdk17.ps1
$env:JAVA_HOME = "C:\Users\SeuUsuario\JDKs\jdk-17"
Write-Host "JAVA_HOME definido para: $env:JAVA_HOME"
Você executa esse script no terminal sempre que desejar usar o JDK-17.
Crie um script para caaversão do JDK que você precisa ter.
Você pode se perguntar: "Por que eu teria várias versões do JDK no meu PC de desenvolvimento?" A resposta é simples: flexibilidade e compatibilidade. No mundo do desenvolvimento de software, especialmente com Java, raramente trabalhamos em um único projeto que exige uma única versão do JDK.Ter múltiplas versões do JDK é praticamente uma necessidade para desenvolvedores, por alguns motivos:
Muitas empresas e projetos ainda mantêm sistemas antigos que foram construídos com versões mais antigas do Java (como Java 8 ou Java 11). Migrar esses sistemas para as versões mais recentes (Java 17, Java 21, etc.) pode ser um processo demorado e custoso.
Projetos Legados:
Você pode precisar dar manutenção em um sistema que foi compilado e roda perfeitamente em Java 8. Tentar executá-lo ou compilá-lo com um JDK mais novo pode introduzir problemas de compatibilidade, erros de compilação ou comportamentos inesperados devido a APIs removidas ou alterações na linguagem.
Projetos Atuais:
Ao mesmo tempo, você provavelmente estará trabalhando em novos projetos que se beneficiam das funcionalidades e melhorias de desempenho das versões mais recentes do Java.
Ter acesso fácil a diferentes JDKs permite que você alterne entre esses ambientes de forma fluida, garantindo que você possa trabalhar em qualquer projeto sem ter que reconfigurar tudo ou comprometer a estabilidade.
Como desenvolvedor, você não está apenas criando software, mas também garantindo que ele funcione corretamente em diferentes ambientes.
Testes de Compatibilidade:
Se você está desenvolvendo uma biblioteca ou um aplicativo que será distribuído, pode ser crucial testar se ele funciona bem em diferentes versões do Java que seus usuários podem estar utilizando. Por exemplo, você pode querer garantir que seu código funcione no Java 11 (uma versão LTS, de Long-Term Support) e também no Java 17 ou 21 (as versões LTS mais recentes).
Preparação para Atualizações:
Você pode estar preparando um projeto para uma futura atualização de JDK. Ter a nova versão instalada permite que você comece a testar e ajustar seu código antes da transição oficial.
O ecossistema Java está em constante evolução, com novas versões sendo lançadas regularmente (a cada seis meses, com versões LTS a cada dois anos).
Novas Features:
Ter os JDKs mais recentes permite que você explore as novas funcionalidades da linguagem e da JVM. Isso é essencial para se manter atualizado e aplicar as melhores práticas em seus projetos futuros.
Ambientes de Estudo:
Se você está aprendendo sobre recursos específicos de uma versão particular do Java, é muito mais fácil ter essa versão instalada e pronta para uso, sem interferir em seus projetos de trabalho diário.
Algumas ferramentas de desenvolvimento, bibliotecas ou frameworks podem ter requisitos de versão de JDK específicos ou podem se comportar de maneira diferente dependendo da versão do Java que está sendo usada. Ter múltiplas versões garante que você possa atender a esses requisitos sem atrito.
Em resumo, ter múltiplas versões do JDK no seu PC de desenvolvimento é uma estratégia inteligente para lidar com a diversidade do cenário Java, garantindo que você seja produtivo, compatível e sempre atualizado.