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)