image

Acesse bootcamps ilimitados e +650 cursos pra sempre

60
%OFF
Article image
André Nascimento
André Nascimento13/02/2023 01:10
Compartilhe

Gerenciando versões diferentes do Java JDK com SDKMAN! [Ubuntu]

  • #Linux
  • #Java

Você já precisou trabalhar em um projeto antigo em Java 8, mas mantém seu sistema sempre com o último LTS do Java? Ok, a IDE consegue mesclar, mas e quando você precisa rodar no terminal? E quando você precisa exatamente daquela versão específica do Maven?

Seus problemas acabaram… apresento o SDKMAN!

O que é o SDKMAN! ?

SDKMAN! é uma ferramenta que serve para gerenciar versões paralelas de vários SDKs, que o SDKMAN! chama de “candidates”.

Ela fornece uma conveniente Interface de Linha de Comando (CLI) e API para listar, instalar, trocar e remover candidatos. Além disso, ela cuida da parte mais chata do processo que é a definição de variáveis de ambiente.

Ela também permite que os devs instalem SDKs baseados em JVM como Java, Groovy, Scala, Kotlin e Ceylon. Maven, Gradle, SBT, Spring Boot, Vert.x, e muitos outras também são suportadas. O SDKMAN! é um utilitário gratuito, leve e de código aberto escrito em Bash.

Instalando o SDKMAN!

SDKMAN! é suportado na maioria dos sistemas operacionais e pode ser instalado facilmente em todos os sistemas baseados em Unix. E melhor, suporta tanto o Bash como o Zsh.

Então bora instalar via terminal:

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

Depois de baixar, ao final da instalação é preciso executar o comando

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

E para testar depois a gente usa o comando

$ sdk version
SDKMAN!
script: 5.16.1
native: 0.1.0

Para ver o que você pode fazer basta usar o comando:

$ sdk help

Listando todos os SDKs disponíveis

$ sdk list

Lista todos os SDKs que o SDKMAN! pode nos ajudar a instalar paralelamente e trocar fácil de versão. Dá para navegar com as setinhas do teclado ou pelas letras ali no começo. Usamos o q para encerrar o comando:

=====================================================
Available Candidates
=====================================================
q-quit                                  /-search down
j-down                                  ?-search up
k-up                                    h-help
Apache ActiveMQ (Classic) (5.17.1)                  https://activemq.apache.org/

Apache ActiveMQ® is a popular open source, multi-protocol, Java-based message
broker. It supports industry standard protocols so users get the benefits of
client choices across a broad range of languages and platforms. Connect from
clients written in JavaScript, C, C++, Python, .Net, and more. Integrate your
multi-platform applications using the ubiquitous AMQP protocol. Exchange
messages between your web applications using STOMP over websockets. Manage your
IoT devices using MQTT. Support your existing JMS infrastructure and beyond.
ActiveMQ offers the power and flexibility to support any messaging use-case.

                                                        $ sdk install activemq
--------------------------------------------------------------------------------
Ant (1.10.13)                                            https://ant.apache.org/

:

Instalando e gerenciando versões do Java

=> Listando as Versões

Para listar as versões disponíveis de Java, use o comando list. O resultado é uma tabela de entradas agrupadas pelo fornecedor e ordenadas por versão:

================================================================================
Available Java Versions for Linux 64bit
================================================================================
 Vendor        | Use | Version      | Dist    | Status     | Identifier
--------------------------------------------------------------------------------
 Corretto      |     | 19.0.2       | amzn    |            | 19.0.2-amzn        
 
             |     | 19.0.1       | amzn    | installed  | 19.0.1-amzn        
 
             | >>> | 17.0.6       | amzn    | installed  | 17.0.6-amzn        
 
             |     | 17.0.5       | amzn    |            | 17.0.5-amzn        
 
             |     | 11.0.18      | amzn    |            | 11.0.18-amzn       
 
             |     | 11.0.17      | amzn    |            | 11.0.17-amzn        
             |     | 8.0.362      | amzn    |            | 8.0.362-amzn        
             |     | 8.0.352      | amzn    | installed  | 8.0.352-amzn        
 Dragonwell    |     | 17.0.6       | albba   |            | 17.0.6-albba 

Na minha máquina eu uso as versões acima, mas você pode navegar e procurar os seus candidatos favoritos

Vamos precisar deste comando cada vez que quisermos verificar, trocar ou gerenciar o armazenamento dos candidatos.

=> Instalando uma versão de Java

Digamos que queremos instalar a mais nova versão do Java da Azul Zulu que é a 19. Portanto, copiamos ou decoramos seu identificador (pois dá pra usar o [tab] pra ir completando caso necessário) [19.0.2-zulu], e o acrescentamos como argumento no comando install:

$ sdk install java 19.0.2-zulu
Downloading: java 19.0.2-zulu

In progress...

######################################################################### 100,0%

Repackaging Java 19.0.2-zulu...

Done repackaging...

Installing: java 19.0.2-zulu
Done installing!

Do you want java 19.0.2-zulu to be set as default? (Y/n): 

Como no meu caso eu já tenho outros instalados, ele me questiona se eu quero escolher essa versão como padrão, caso sim, basta apertar o Enter, ou teclar ‘Y’.

Além disso, ele já atualizará as variáveis de ambiente para podermos usar o Java no terminal imediatamente.

$ java --version
openjdk 19.0.2 2023-01-17
OpenJDK Runtime Environment Zulu19.32+13-CA (build 19.0.2+7)
OpenJDK 64-Bit Server VM Zulu19.32+13-CA (build 19.0.2+7, mixed mode, sharing)

Podemos verificar o status e o uso de qualquer versão usando o comando list. Vou mostrar aqui apenas essa que acabei de instalar como exemplo:

================================================================================
Available Java Versions for Linux 64bit
================================================================================
 Vendor        | Use | Version      | Dist    | Status     | Identifier
--------------------------------------------------------------------------------

 Zulu          | >>> | 19.0.2       | zulu    | installed  | 19.0.2-zulu         
             |     | 19.0.2.fx    | zulu    |            | 19.0.2.fx-zulu 

Mas e se eu precisar instalar uma versão que não está na lista, dá? Dá sim, é só colocar como argumento depois do java um nome personalizado e o caminho para o SDK.

$ sdk install java andre-8 ~/Downloads/meu-java-jdk-andre-8

=> Trocando de versão

É muito fácil trocar de versão de Java. Podemos trocar de duas formas, apenas naquele terminal temporariamente:

$ sdk use java 19.0.2-zulu

ou permanentemente:

$ sdk default java 19.0.2-zulu

=> Removendo uma versão

Para remover uma versão é só usar o comando abaixo trocando o argumento após o java pela versão que desejar remover

$ sdk uninstall java 19.0.2-zulu

Uninstalling java 19.0.2-zulu...

=> Mostrando as versões em uso

Para verificar a versão que esta sendo usada no momento usamos o comando current:

$ sdk current java
Using java version 19.0.1-amzn

Ou você pode conferir como fizemos anteriormente com o comando java --version:

$ java -version
openjdk 19.0.1 2022-10-18
OpenJDK Runtime Environment Corretto-19.0.1.10.1 (build 19.0.1+10-FR)
OpenJDK 64-Bit Server VM Corretto-19.0.1.10.1 (build 19.0.1+10-FR, mixed mode, sharing)

Para exibir todas as versões atuais de todos os SDK que estão sendo gerenciadas pelo SDKMAN!, usamos o comando current sem nenhum argumento:

$ sdk current
Using:

java: 19.0.1-amzn
maven: 3.8.7
springboot: 3.0.1

Usando o SDKMAN! em outros lugares

As instalações de SDK ficam guardadas por padrão no diretório do SDKMAN! cujo padrão é ~/.sdkman/candidates.

Podemos observar que todas as diferentes versões de Java que instalarmos vão ficar disponíveis para todo o sistema no caminho ~/.sdkman/candidates/java/ e cada subdiretório é nomeado de acordo com sua versão:

$ ls -al ~/.sdkman/candidates/java/
total 20
drwxrwxr-x 5 andre andre 4096 fev 13 00:42 .
drwxrwxr-x 5 andre andre 4096 jan 17 23:27 ..
lrwxrwxrwx 1 andre andre   58 jan 30 19:02 13.0.14-zulu -> /home/andre/java-sdks/zulu13.54.17-ca-jdk13.0.14-linux_x64
lrwxrwxrwx 1 andre andre   34 jan 26 15:03 15.0.2-aojdk -> /home/andre/java-sdks/jdk-15.0.2+7
drwxr-xr-x 9 andre andre 4096 jan 10 18:45 17.0.6-amzn
drwxr-xr-x 9 andre andre 4096 out 12 21:43 19.0.1-amzn
drwxr-xr-x 7 andre andre 4096 out 14 00:53 8.0.352-amzn
lrwxrwxrwx 1 andre andre   11 jan 28 20:06 current -> 17.0.6-amzn

Portanto, a versão atualmente selecionada de Java também estará disponível como atual nesse diretório.

Na mesma linha, o Gradle ou qualquer outro SDK será instalado dentro do diretório candidates.

Desta forma, podemos utilizar qualquer versão particular de Java, por exemplo, em nossa IDE favorita. Tudo o que temos que fazer é copiar o caminho de uma versão específica e defini-la na configuração de nossa IDE.

Conclusão

Vimos como é simples e prático mantermos várias versões de Java e de outras SDK com o SDKMAN!

Espero que ajude em sua caminhada como ajudou na minha.

Baseado no artigo: https://www.baeldung.com/java-sdkman-intro#install-sdkman
Compartilhe
Comentários (0)