Como instalar e gerenciar multiplas versão do Java com SDKMAN!

Postador por : at

Categoria : java


Neste post vamos resolver um problema muito comum entre quase todos os programadores Java, principalmente quando se esta iniciando, e da aquele certo medo de instalar uma nova versão do java e estragar todo o ambiente que ja estava funcionando.

Então para resolver esse problema de uma vez por todas vamos aprender neste post instalar no (Linux/MacOs) e usar o SDKMAN!, uma ferramenta muito simples e util para qualquer programador Java.

SDKMAN! é uma ferramenta para gerenciar versões paralelas de vários kits de desenvolvimento de software na maioria dos sistemas baseados em Unix. Ele fornece uma interface de linha de comando (CLI) e API convenientes para instalar, alternar, remover e listar candidatos. Anteriormente conhecido como GVM, o Groovy enVironment Manager , foi inspirado nas ferramentas RVM e rbenv muito úteis, amplamente utilizadas pela comunidade Ruby.

Instalando SDKMAN!

Instalando SDKMAN! em plataformas UNIX é mais fácil do que nunca. SDKMAN!, instale sem maiores esforços no Mac OSX, Linux, WSL, Cygwin, Solaris e FreeBSD. Também existe suporte para shells Bash e ZSH.
Basta abrir um novo terminal e inserir:

$ curl -s "https://get.sdkman.io" | bash

Siga as instruções na tela para concluir a instalação.
Em seguida, abra um novo terminal ou digite:

$ source "$HOME/.sdkman/bin/sdkman-init.sh"

Por último, execute o seguinte snippet de código para garantir que a instalação foi bem-sucedida:

$ sdk version

Se tudo correr bem, a versão deve ser exibida. Algo como:

sdkman 5.0.0+51

E por fim adicione no final do arquivo em seu .bash_profile / .zshrc / .bashrc a seguinte instrução.

# SDK Man replaced GVM. Using for Groovy, Gradle, and Maven Version Management
export SDKMAN_DIR="$HOME/.sdkman"
[[ -s "$HOME/.sdkman/bin/sdkman-init.sh" ]] && source "$HOME/.sdkman/bin/sdkman-init.sh"

Utilizando

Instalando SDK

Instale a versão estável mais recente do Java SDK de sua escolha executando o seguinte comando:

$ sdk install java

Você verá algo como a seguinte saída:

Downloading: java 8u111

In progress...

######################################################################## 100.0%

Installing: java 8u111
Done installing!

Agora a instalação irá te perguntar se deseja que esta versão seja definida como padrão.

Do you want java 8u111 to be set as default? (Y/n):

Responder Y (ou pressionar enter ) garantirá que todos os shells subsequentes abertos terão esta versão do SDK em uso por padrão.

Setting java 8u111 as default.
Instalando uma versão especfica

Vamos listar as versões disponiveis para o java:

sdk list java

Você verá uma saida com todas as versões disponiveis, juntos com seus fornecedores:

================================================================================
Available Java Versions
================================================================================
 Vendor        | Use | Version      | Dist    | Status     | Identifier
--------------------------------------------------------------------------------
 AdoptOpenJDK  |     | 16.0.1.j9    | adpt    |            | 16.0.1.j9-adpt      
               |     | 16.0.1.hs    | adpt    |            | 16.0.1.hs-adpt      
               |     | 16.0.0.j9    | adpt    |            | 16.0.0.j9-adpt      
               |     | 16.0.0.hs    | adpt    |            | 16.0.0.hs-adpt      
               |     | 11.0.11.j9   | adpt    |            | 11.0.11.j9-adpt     
               |     | 11.0.11.hs   | adpt    |            | 11.0.11.hs-adpt     
               |     | 11.0.10.j9   | adpt    |            | 11.0.10.j9-adpt     
               |     | 11.0.10.hs   | adpt    |            | 11.0.10.hs-adpt     
               |     | 8.0.292.j9   | adpt    |            | 8.0.292.j9-adpt     
               |     | 8.0.292.hs   | adpt    |            | 8.0.292.hs-adpt     
               |     | 8.0.282.j9   | adpt    |            | 8.0.282.j9-adpt     
               |     | 8.0.282.hs   | adpt    |            | 8.0.282.hs-adpt     
 Alibaba       |     | 11.0.9.4     | albba   |            | 11.0.9.4-albba      
               |     | 8.5.5        | albba   |            | 8.5.5-albba         
 Amazon        |     | 16.0.1.9.1   | amzn    |            | 16.0.1.9.1-amzn     
               |     | 16.0.0.36.1  | amzn    |            | 16.0.0.36.1-amzn    
               |     | 15.0.2.7.1   | amzn    |            | 15.0.2.7.1-amzn     
               |     | 11.0.11.9.1  | amzn    |            | 11.0.11.9.1-amzn    
               |     | 11.0.10.9.1  | amzn    |            | 11.0.10.9.1-amzn    
               |     | 8.292.10.1   | amzn    |            | 8.292.10.1-amzn     
               |     | 8.282.08.1   | amzn    |            | 8.282.08.1-amzn     
 Azul Zulu     |     | 16.0.1       | zulu    |            | 16.0.1-zulu         
               |     | 16.0.0       | zulu    |            | 16.0.0-zulu         
               |     | 16.0.0.fx    | zulu    |            | 16.0.0.fx-zulu      
               |     | 15.0.2.fx    | zulu    |            | 15.0.2.fx-zulu      
               |     | 11.0.11      | zulu    |            | 11.0.11-zulu        
               |     | 11.0.10      | zulu    |            | 11.0.10-zulu        
               |     | 11.0.10.fx   | zulu    |            | 11.0.10.fx-zulu     
               |     | 8.0.292      | zulu    |            | 8.0.292-zulu        
               |     | 8.0.282      | zulu    |            | 8.0.282-zulu        
               |     | 8.0.282.fx   | zulu    |            | 8.0.282.fx-zulu     
               |     | 7.0.302      | zulu    |            | 7.0.302-zulu        
               |     | 7.0.292      | zulu    |            | 7.0.292-zulu        
               |     | 6.0.119      | zulu    |            | 6.0.119-zulu        
 BellSoft      |     | 16.0.1.fx    | librca  |            | 16.0.1.fx-librca    
               |     | 16.0.1       | librca  |            | 16.0.1-librca       
               |     | 16.0.0.fx    | librca  |            | 16.0.0.fx-librca    
               |     | 16.0.0       | librca  |            | 16.0.0-librca       
               |     | 11.0.11.fx   | librca  |            | 11.0.11.fx-librca   
               |     | 11.0.11      | librca  |            | 11.0.11-librca      
               |     | 11.0.10.fx   | librca  |            | 11.0.10.fx-librca   
               |     | 11.0.10      | librca  |            | 11.0.10-librca      
               |     | 8.0.292.fx   | librca  |            | 8.0.292.fx-librca   
               |     | 8.0.292      | librca  |            | 8.0.292-librca      
               |     | 8.0.282.fx   | librca  |            | 8.0.282.fx-librca   
               |     | 8.0.282      | librca  |            | 8.0.282-librca      
 GraalVM       |     | 21.1.0.r16   | grl     |            | 21.1.0.r16-grl      
               |     | 21.1.0.r11   | grl     |            | 21.1.0.r11-grl      
               |     | 21.1.0.r8    | grl     |            | 21.1.0.r8-grl       
               |     | 21.0.0.2.r11 | grl     |            | 21.0.0.2.r11-grl    
               |     | 21.0.0.2.r8  | grl     |            | 21.0.0.2.r8-grl     
               |     | 20.3.2.r11   | grl     |            | 20.3.2.r11-grl      
               |     | 20.3.2.r8    | grl     |            | 20.3.2.r8-grl       
               |     | 20.3.1.2.r11 | grl     |            | 20.3.1.2.r11-grl    
               |     | 20.3.1.2.r8  | grl     |            | 20.3.1.2.r8-grl     
               |     | 19.3.6.r11   | grl     |            | 19.3.6.r11-grl      
               |     | 19.3.6.r8    | grl     |            | 19.3.6.r8-grl       
               |     | 19.3.5.r11   | grl     |            | 19.3.5.r11-grl      
               |     | 19.3.5.r8    | grl     |            | 19.3.5.r8-grl       
 Java.net      |     | 17.ea.23     | open    |            | 17.ea.23-open       
               |     | 17.ea.22     | open    |            | 17.ea.22-open       
               |     | 17.ea.21     | open    |            | 17.ea.21-open       
               |     | 17.ea.20     | open    |            | 17.ea.20-open       
               |     | 17.ea.19     | open    |            | 17.ea.19-open       
               |     | 17.ea.7.lm   | open    |            | 17.ea.7.lm-open     
               |     | 17.ea.3.pma  | open    |            | 17.ea.3.pma-open    
               |     | 16           | open    |            | 16-open             
               |     | 16.0.1       | open    |            | 16.0.1-open         
               |     | 11.0.11      | open    |            | 11.0.11-open        
               |     | 11.0.10      | open    |            | 11.0.10-open        
               |     | 11.0.2       | open    |            | 11.0.2-open         
               |     | 8.0.292      | open    |            | 8.0.292-open        
               |     | 8.0.282      | open    |            | 8.0.282-open        
               |     | 8.0.265      | open    |            | 8.0.265-open        
 Mandrel       |     | 21.1.0.0     | mandrel |            | 21.1.0.0-mandrel    
               |     | 20.3.2.0     | mandrel |            | 20.3.2.0-mandrel    
 Microsoft     |     | 11.0.11.9.1  | ms      |            | 11.0.11.9.1-ms      
               |     | 11.0.10.9    | ms      |            | 11.0.10.9-ms        
 SAP           |     | 16           | sapmchn |            | 16-sapmchn          
               |     | 16.0.1       | sapmchn |            | 16.0.1-sapmchn      
               |     | 15.0.2       | sapmchn |            | 15.0.2-sapmchn      
               |     | 11.0.11      | sapmchn |            | 11.0.11-sapmchn     
               |     | 11.0.10      | sapmchn |            | 11.0.10-sapmchn     
 TravaOpenJDK  |     | 11.0.9       | trava   |            | 11.0.9-trava        
               |     | 8.0.232      | trava   |            | 8.0.232-trava       
================================================================================
Use the Identifier for installation:

    $ sdk install java 11.0.3.hs-adpt
================================================================================

Vamos instalar a versão do OpenJDK 11, para isso digite no terminal:

$ sdk install java 11.0.11.hs-adpt

Então continue com o processo de instalação mas não defina como padrão a aplicação quando o cli perguntar:

Downloading: java 11.0.11.hs-adpt

In progress...

##################################################################################################################################################### 100.0%##################################################################################################################################################### 100.0%

Repackaging Java 11.0.11.hs-adpt...

Done repackaging...

Installing: java 11.0.11.hs-adpt
Done installing!

Do you want java 11.0.11.hs-adpt to be set as default? (Y/n): N
Utilizando uma versão especfica

Podemos listar qual versão estamos utilizando com o seguinte comando:

$ sdk current java

A saida no terminal sera:

Using java version 8u111

Agora ao utilizarmos o comando para listar todas as versãos do java, podemos ver quais existem instaladas na coluna Status:

================================================================================
Available Java Versions
================================================================================
 Vendor        | Use | Version      | Dist    | Status     | Identifier
--------------------------------------------------------------------------------
 AdoptOpenJDK  |     | 16.0.1.j9    | adpt    |            | 16.0.1.j9-adpt      
               | >>> | 16.0.1.hs    | adpt    | installed  | 16.0.1.hs-adpt      
               |     | 16.0.0.j9    | adpt    |            | 16.0.0.j9-adpt      
               |     | 16.0.0.hs    | adpt    |            | 16.0.0.hs-adpt      
               |     | 11.0.11.j9   | adpt    |            | 11.0.11.j9-adpt     
               |     | 11.0.11.hs   | adpt    | installed  | 11.0.11.hs-adpt     
               |     | 11.0.10.j9   | adpt    |            | 11.0.10.j9-adpt     
               |     | 11.0.10.hs   | adpt    |            | 11.0.10.hs-adpt     
               |     | 8.0.292.j9   | adpt    |            | 8.0.292.j9-adpt     
               |     | 8.0.292.hs   | adpt    |            | 8.0.292.hs-adpt     
               |     | 8.0.282.j9   | adpt    |            | 8.0.282.j9-adpt     
               |     | 8.0.282.hs   | adpt    |            | 8.0.282.hs-adpt     
 Alibaba       |     | 11.0.9.4     | albba   |            | 11.0.9.4-albba      
               |     | 8.5.5        | albba   |            | 8.5.5-albba         
 Amazon        |     | 16.0.1.9.1   | amzn    |            | 16.0.1.9.1-amzn     
               |     | 16.0.0.36.1  | amzn    |            | 16.0.0.36.1-amzn    
               |     | 15.0.2.7.1   | amzn    |            | 15.0.2.7.1-amzn     
               |     | 11.0.11.9.1  | amzn    |            | 11.0.11.9.1-amzn    
               |     | 11.0.10.9.1  | amzn    |            | 11.0.10.9.1-amzn    
               |     | 8.292.10.1   | amzn    |            | 8.292.10.1-amzn     
               |     | 8.282.08.1   | amzn    |            | 8.282.08.1-amzn     
 Azul Zulu     |     | 16.0.1       | zulu    |            | 16.0.1-zulu         
               |     | 16.0.0       | zulu    |            | 16.0.0-zulu         
               |     | 16.0.0.fx    | zulu    |            | 16.0.0.fx-zulu      
               |     | 15.0.2.fx    | zulu    |            | 15.0.2.fx-zulu      
               |     | 11.0.11      | zulu    |            | 11.0.11-zulu        
               |     | 11.0.10      | zulu    |            | 11.0.10-zulu        
               |     | 11.0.10.fx   | zulu    |            | 11.0.10.fx-zulu     
               |     | 8.0.292      | zulu    |            | 8.0.292-zulu        
               |     | 8.0.282      | zulu    |            | 8.0.282-zulu        
               |     | 8.0.282.fx   | zulu    |            | 8.0.282.fx-zulu     
               |     | 7.0.302      | zulu    |            | 7.0.302-zulu        
               |     | 7.0.292      | zulu    |            | 7.0.292-zulu        
               |     | 6.0.119      | zulu    |            | 6.0.119-zulu        
 BellSoft      |     | 16.0.1.fx    | librca  |            | 16.0.1.fx-librca    
               |     | 16.0.1       | librca  |            | 16.0.1-librca       
               |     | 16.0.0.fx    | librca  |            | 16.0.0.fx-librca    
               |     | 16.0.0       | librca  |            | 16.0.0-librca       
               |     | 11.0.11.fx   | librca  |            | 11.0.11.fx-librca   
               |     | 11.0.11      | librca  |            | 11.0.11-librca      
               |     | 11.0.10.fx   | librca  |            | 11.0.10.fx-librca   
               |     | 11.0.10      | librca  |            | 11.0.10-librca      
               |     | 8.0.292.fx   | librca  |            | 8.0.292.fx-librca   
               |     | 8.0.292      | librca  |            | 8.0.292-librca      
               |     | 8.0.282.fx   | librca  |            | 8.0.282.fx-librca   
               |     | 8.0.282      | librca  |            | 8.0.282-librca      
 GraalVM       |     | 21.1.0.r16   | grl     |            | 21.1.0.r16-grl      
               |     | 21.1.0.r11   | grl     |            | 21.1.0.r11-grl      
               |     | 21.1.0.r8    | grl     |            | 21.1.0.r8-grl       
               |     | 21.0.0.2.r11 | grl     |            | 21.0.0.2.r11-grl    
               |     | 21.0.0.2.r8  | grl     |            | 21.0.0.2.r8-grl     
               |     | 20.3.2.r11   | grl     |            | 20.3.2.r11-grl      
               |     | 20.3.2.r8    | grl     |            | 20.3.2.r8-grl       
               |     | 20.3.1.2.r11 | grl     |            | 20.3.1.2.r11-grl    
               |     | 20.3.1.2.r8  | grl     |            | 20.3.1.2.r8-grl     
               |     | 19.3.6.r11   | grl     |            | 19.3.6.r11-grl      
               |     | 19.3.6.r8    | grl     |            | 19.3.6.r8-grl       
               |     | 19.3.5.r11   | grl     |            | 19.3.5.r11-grl      
               |     | 19.3.5.r8    | grl     |            | 19.3.5.r8-grl       
 Java.net      |     | 17.ea.23     | open    |            | 17.ea.23-open       
               |     | 17.ea.22     | open    |            | 17.ea.22-open       
               |     | 17.ea.21     | open    |            | 17.ea.21-open       
               |     | 17.ea.20     | open    |            | 17.ea.20-open       
               |     | 17.ea.19     | open    |            | 17.ea.19-open       
               |     | 17.ea.7.lm   | open    |            | 17.ea.7.lm-open     
               |     | 17.ea.3.pma  | open    |            | 17.ea.3.pma-open    
               |     | 16           | open    |            | 16-open             
               |     | 16.0.1       | open    |            | 16.0.1-open         
               |     | 11.0.11      | open    |            | 11.0.11-open        
               |     | 11.0.10      | open    |            | 11.0.10-open        
               |     | 11.0.2       | open    |            | 11.0.2-open         
               |     | 8.0.292      | open    |            | 8.0.292-open        
               |     | 8.0.282      | open    |            | 8.0.282-open        
               |     | 8.0.265      | open    |            | 8.0.265-open        
 Mandrel       |     | 21.1.0.0     | mandrel |            | 21.1.0.0-mandrel    
               |     | 20.3.2.0     | mandrel |            | 20.3.2.0-mandrel    
 Microsoft     |     | 11.0.11.9.1  | ms      |            | 11.0.11.9.1-ms      
               |     | 11.0.10.9    | ms      |            | 11.0.10.9-ms        
 SAP           |     | 16           | sapmchn |            | 16-sapmchn          
               |     | 16.0.1       | sapmchn |            | 16.0.1-sapmchn      
               |     | 15.0.2       | sapmchn |            | 15.0.2-sapmchn      
               |     | 11.0.11      | sapmchn |            | 11.0.11-sapmchn     
               |     | 11.0.10      | sapmchn |            | 11.0.10-sapmchn     
 TravaOpenJDK  |     | 11.0.9       | trava   |            | 11.0.9-trava        
               |     | 8.0.232      | trava   |            | 8.0.232-trava       
================================================================================
Use the Identifier for installation:

    $ sdk install java 11.0.3.hs-adpt
================================================================================

Vamos alterar a versão de uso para 11.0.11.hs-adpt:

$ sdk use java 11.0.11.hs-adpt

Apresentará uma saída no terminal:

Using java version 11.0.11.hs-adpt in this shell.

Agora podemos validar a versão do java:

$ java -version

Saída:

openjdk version "11.0.11" 2021-04-20
OpenJDK Runtime Environment AdoptOpenJDK-11.0.11+9 (build 11.0.11+9)
OpenJDK 64-Bit Server VM AdoptOpenJDK-11.0.11+9 (build 11.0.11+9, mixed mode)

Conclusão

Vismos neste artigo como pode ser facil agora instalar e alternar entre versões do java utilizando o SDKMAN!, vimos também que ele não tras somente uma fonte de fornecedor, podemos instalar o JDK do OpenJdk, GraalVM, Mandrel, Amazon e muitas outras, e vimos como podemos alternar entre as versões somente com um simples comando no terminal.

Espero que este artigo tenha te ajudado a perder um pouco do medo de configurar varios ambientes de desenvolvimento.

E não deixe de explicar a documentação do SDKMAN! e explocar a ferramenta, pois ela oferece suporte não só para o Java, mas também diversas outras linguagens, ferramentas e frameworks, como Kotlin, Maven, Gradle Scala, Spring Boot, Spark e muitas outras.

Fontes: SDKMAN! Docs