DEV Community

Paulo Gabriel
Paulo Gabriel

Posted on • Edited on

MISE - Gerenciando SDKs de maneira inteligente

O que é mise?

mise além de uma série de placas de vídeo da NVIDIA, também é uma ferramente para gerenciamento de SDKs, com ele gerenciamos automaticamente versões, variáveis de ambiente, task runners, etc. Podemos usá-lo no lugar do asdf-vm, jenv, nvm, sdkman e outras ferramentas, sim, ele substitui todas elas.

Como instalar?

O processo de instalação do mise é bem simples, basta executarmos o seguinte comando, tanto para Linux quanto para MacOS

curl https://mise.jdx.dev/install.sh | sh
Enter fullscreen mode Exit fullscreen mode

Agora o processo de ativação do mise varia conforme o tipo de shell que você utiliza. Por exemplo para ativarmos ele no zsh devemos usar da seguinte maneira:

echo 'eval "$(mise activate zsh)"' >> ~/.zshrc
Enter fullscreen mode Exit fullscreen mode

Para bash:

echo 'eval "$(~/.local/share/mise/bin/mise activate bash)"' >> ~/.bashrc
Enter fullscreen mode Exit fullscreen mode

Para fish:

echo '~/.local/share/mise/bin/mise activate fish | source' >> ~/.config/fish/config.fish
Enter fullscreen mode Exit fullscreen mode

Para adicionarmos os shims devemos adiciona-los no PATH, com isso temos um maior suporte para IDEs como as da JetBrains e até mesmo o VSCode.

export PATH="$HOME/.local/share/mise/shims:$PATH"
Enter fullscreen mode Exit fullscreen mode

Plugins

Por padrão o mise já vem com plugins para Go, Java, NodeJS, Python e Ruby. Mas podemos instalar plugins com facilidade, por exemplo rodando o fcomando abaixo, adicionamos o plugin para Bun

mise plugin add bun
Enter fullscreen mode Exit fullscreen mode

E com o seguinte comando conseguimos listar todas as versões de bun disponiveis.

mise ls-remote bun
Enter fullscreen mode Exit fullscreen mode

Ps. Todos os plugins do asdf são compatíveis com o mise.

Demonstração

Para usar de exemplo vou utilizar o JDK, que é com o que eu trabalho diariamente, e eu também utilizo como gerenciador de dependencias o maven, então irei instalar o plugin do Maven, do do Java não tem necessidade, pois faz parte do core do mise.

mise plugin add maven
Enter fullscreen mode Exit fullscreen mode

Vou listar as versões do maven com

mise ls-remove maven
Enter fullscreen mode Exit fullscreen mode

Vi que a última versão disponível é a 3.9.6 para isso eu instalo esta versão usando o comando.

mise install maven@3.9.6
Enter fullscreen mode Exit fullscreen mode

E para configura-lo para o uso global uso o comando

mise global maven@3.9.6
Enter fullscreen mode Exit fullscreen mode

Se eu for na minha home, eu encontro o seguinte arquivo .tool-versions com o seguinte conteudo.

maven  3.9.6
Enter fullscreen mode Exit fullscreen mode

Agora vou listar todas as versões do Java usando os mesmos comandos, porém quero apenas os JDK que são opendjk.

mise ls-remote java@openjdk
Enter fullscreen mode Exit fullscreen mode

Usando o comando desta maneira eu consigo filtrar a grande lista de JDKs disponíveis, se eu não adicionar o @openjdk ele ira listar todos os disponíveis, sendo Zulu, GraalVM, adopt, etc.

Usando o comando abaixo eu instalo a versão do java e configuro ele como o global em apenas uma linha comando.

mise install java@openjdk-21.0.1 && mise global java@openjdk-21.0.1 
Enter fullscreen mode Exit fullscreen mode

Pronto usando os comandos

mvn --version
java --version
echo $JAVA_HOME
Enter fullscreen mode Exit fullscreen mode

Tenho as seguintes saidas no terminal

❯ mvn --version
Apache Maven 3.9.6 (bc0240f3c744dd6b6ec2920b3cd08dcc295161ae)
Maven home: /home/pgjbz/.local/share/mise/installs/maven/3.9.6
Java version: 21.0.1, vendor: Oracle Corporation, runtime: /home/pgjbz/.local/share/mise/installs/java/openjdk-21.0.1
Default locale: en, platform encoding: UTF-8
OS name: "linux", version: "6.1.69-1-lts", arch: "amd64", family: "unix"
❯ java --version
openjdk 21.0.1 2023-10-17
OpenJDK Runtime Environment (build 21.0.1+12-29)
OpenJDK 64-Bit Server VM (build 21.0.1+12-29, mixed mode, sharing)echo $JAVA_HOME
/home/pgjbz/.local/share/mise/installs/java/openjdk-21.0.1
Enter fullscreen mode Exit fullscreen mode

Legal, mas até ai parece apenas um "apt", "pacman" da vida, porém configurando automaticamente variaveis de ambiente.

Agora vamos ao que é mais legal, usando este meu projeto https://github.com/pgjbz/twitch-loco-bot de 3 anos atrás, usando o Java 11, com o arquivo .tool-versions dentro dele, configurado com o java openjdk-11.0.1, podemos simplismente entrar no projeto e digitar o comando

mise install
Enter fullscreen mode Exit fullscreen mode

Feito isso já temos o Java 11 instalado e configurado para este projeto.

Para verifircar-mos vamos usar os comandos.

❯ java --version
openjdk 11.0.1 2018-10-16
OpenJDK Runtime Environment 18.9 (build 11.0.1+13)
OpenJDK 64-Bit Server VM 18.9 (build 11.0.1+13, mixed mode)echo $JAVA_HOME
/home/pgjbz/.local/share/mise/installs/java/openjdk-11.0.1
Enter fullscreen mode Exit fullscreen mode

Veja que a variável de ambiente trocou o seu valor, e agora, para voltar ao Java 21? Basta sairmos da pasta do projeto e podemos validar.

❯ java --version
openjdk 21.0.1 2023-10-17
OpenJDK Runtime Environment (build 21.0.1+12-29)
OpenJDK 64-Bit Server VM (build 21.0.1+12-29, mixed mode, sharing)echo $JAVA_HOME
/home/pgjbz/.local/share/mise/installs/java/openjdk-21.0.1
Enter fullscreen mode Exit fullscreen mode

Pronto, voltamos a configuração para o Java 21, isso vale para qualquer ferramenta, para go, node, deno, bun, ruby, ocaml, haskell, elixir, etc.

Com essa ferramenta podemos facilitar a padronização nos projetos para o time, sempre deixando tudo com as versões corretas.

Lembrando, o mise ira priorizar os arquivos .tool-versions da pasta atual, e caso não exista ele irá utilizar a global.

Top comments (0)