Gerenciando os gerenciadores de pacotes com ASDF
Tags: java, npm, pacotes, go
Published: 2023-11-16 14:48:14

## Gerenciando os gerenciadores de pacotes com ASDF
Em nossa vida como desenvolvedor constantemente temos que ficar mudando de projeto em projeto cada um com suas próprias stacks  e suas versões. Para melhorar a transição entre as versões cada linguagem foi criando seu próprio gerenciador de pacotes ou package manager. O Python tem o Pip, o Node tem o Npm ou o Yarn, o Php com o composer. Porém a medida que estamos lidando com stacks diferentes a tendência é que fiquemos com múltiplos gerenciadores de pacotes um para cada linguagem e cada um com sua própria CLI. 
Para o nosso dia a dia isso termina sendo um pouco desconfortável porque temos que adaptar a linguagem e termina não ficando prático. 
A algum tempo tipo contato com um gerenciador chamado **ASDF** ele é orientado a plugins e o que significa isso ? Na prática se estamos trabalhando com por exemplo Node, Java e Php só vamos precisar apenas instalar os plugins para essas versões e usar a mesma linguagem do ASDF para instalar qualquer versão das linguagens. 
Com isso temos o controle de versão tanto global quanto local, o que mostra-se muito prático quando estamos lidando com projeto com versões diferentes da mesma tecnologia. 
No exemplo que quero demonstrar hoje pra vocês, vamos demonstrar como poderíamos ter dois projetos Java com versões diferentes rodando ao mesmo tempo. Isso é possível pois o ASDF permite que tenhamos versões locais para cada projeto. 
Importante lembrar que o ASDF está disponível para sistemas Linux e Mac, mas poderemos usar no Windows usando o WSL. 
Para o nosso exemplo vamos considerar uma máquina Linux usando o Ubuntu:
Para isso vamos acessar a página de instalação do [ASDF](https://asdf-vm.com/) e executar os seguintes scripts :
```
git clone https://github.com/asdf-vm/asdf.git ~/.asdf --branch v0.13.1
```
Uma vez clonado o projeto precisamos atualizar o bash ou o zsh:
```source ~/.zshrc```
Feito isso, se abrirmos um novo terminal e digitarmos: 'asdf' deveremos ver a seguinte tela:

![Image description](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/4a55j3o31uosq0uh6psy.png)

Agora precisaremos instalar o plugin para o Java para isso vamos nesse site do [GitHub](https://github.com/halcyon/asdf-java) e executar os códigos abaixo. Logo após podemos efetuar as seguintes códigos. 
```
https://github.com/halcyon/asdf-java
```
Instalado o plugin do Java podemos listar todas as versões disponíveis com o comando:
```
asdf list-all java
```
Para podermos ver o poder do ASDF para gerenciar múltiplas versões vamos criar dois projetos Java com versões diferentes. 

Utilize os comandos abaixo para instalar as versões 11 e 21 do Java:
```
// Java 21
asdf install java adoptopenjdk-jre-21.0.1+12.0.LTS

// Java 11
asdf install java adoptopenjdk-11.0.16+8
```
Vamos agora criar duas pastas um para cada projeto, chamarei uma de java11 e outra de java21.
Usando o terminal vamos navegar até a pasta java11 e digitar o seguinte comando:
```
asdf local java adoptopenjdk-11.0.16+8
```
Da mesma forma vamos fazer para a pasta java21 e digitar o seguinte comando:
```
asdf local java adoptopenjdk-21.0.0+35.0.LTS
```
Com isso se testarmos usando o comando:
```
java -version
```
em cada uma das pastas devemos ver algo dessa forma:

![Image description](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/nv3403yr16fpbkl0tqdy.png)

Com isso estamos preparados para rodar dois projetos Java ao mesmo tempo com versões totalmente distintas. Lembre-se que isso funciona para outras linguagens como PHP, Go, Erlang, Node Js. Bastando instalar os plugins referente a linguagem que deseja gerenciar suas versões. Para isso podemos pesquisar algo como: asdf plugin go, por exemplo para encontrar o plugin referente a linguagem Go.