avatar

Andres Jaimes

Cómo instalar Scala/Metals en MacOS

By Andres Jaimes

- 2 minutes read - 331 words

Utilizar Scala con Metals puede ser muy complicado si no se utilizan las versiones correctas. Después de muchas horas logré hacerlo funcionar y estoy encantado con su funcionamiento. Mi editor es Helix, pero los siguientes comandos funcionarán con cualquier otro editor.

Lo primero es desinstalar cualquier versión existente que tengamos de bloop o metals y, a continuación, instalar coursier y actualizar scala:

1brew install coursier
2brew upgrade scala

Ahora, utilizando coursier, instalamos bloop y metals:

1coursier install bloop
2coursier install metals

Agregamos bloop a la ruta existente a ~/.bash_profile:

1export PATH="$PATH:/Users/usuario/Library/Application Support/Coursier/bin"

y recargamos para aplicar los cambios:

1source ~/.bash_profile

A continuación, iremos al directorio de nuestro proyecto y borraremos —o renombraremos— cualquier directorio existente de bloop o metals:

1cd mi-proyecto
2rm -Rf .bloop
3rm -Rf .metals

Nota: A partir de aquí, si tenemos múltiples versions de Java instaladas en el ordenador, debemos asegurarnos que las variables de ambiente JAVA_HOME y PATH apunten a la versión que queremos utilizar.

Iniciemos el servicio de bloop pasando como parámetro la versión de java que queremos usar:

1bloop --java-home <path>

Comprobemos que Helix encuentra el servicio de Metals, y leamos el fichero build.sbt de nuestro proyecto:

1hx --health
2hx build.sbt

En este punto, recomiendo tener un panel adicional abierto con el siguiente comando para verificar que todo vaya como esperamos:

1tail -f .metals/metals.log

Para terminar, importaremos el proyecto en Helix:

1:lsp-workspace-command buildIimport

Si todo ha funcionado bien, podremos abrir ficheros adicionales en la sesión de Helix y utilizar funciones como g-r ir a referencias, g-i ir a implementación, etc. En caso de error, debemos revisar el fichero .metals/metals.log.

Nota: Al terminar, podemos detener el servicio de bloop con bloop exit.

Nota: El comando coursier también puede ser utilizado para instalar paquetes adicionales y sus dependencias, por ejemplo:

1coursier fetch org.scala-sbt:compiler-interface:1.11.0

Conclusión

Debemos tener presente el utilizar las versiones de bloop y metals que vienen incluidas con coursier, de otra manera corremos el riesgo de caer en incompatibilidades que resultarán en errores difíciles de corregir.