SdkMan (Software Development Kit Manager) es una utilidad que nos va a permitir instalar y gestionar, de forma simultánea, distintas versiones de nuestras herramientas de desarrollo, como por ejemplo: Gradle, Groovy, Java, Maven, Scala, …
Índice de contenidos
- 1. Introducción
- 2. Entorno
- 3. Instalación de SdkMan
- 4. Instalando Java 8 y 9 con SdkMan
- 5. Cambiando entre versiones de Java con SdkMan
- 6. Conclusiones
- 7. Sobre el autor
1. Introducción
SdkMan nos va a facilitar la instalación de las distintas herramientas de desarrollo. Pero para mi lo importante, o donde más valor aporta, es «de forma simultánea«. Es decir podemos tener instaladas distintas versiones, por ejemplo de Java, y usar una u otra en función de nuestras necesidades.
Por ejemplo podemos tener Java 8 para nuestros desarrollos habituales y tener Java 9 para empezar a juguetear con las nuevas funcionalidades. SdkMan nos permitirá pasar de una a otra de forma muy sencilla y sin afectar al resto del sistema.
Ojo porque SdkMan no es lo mismo que jEnv. jEnv se limita a Java y no hace la instalación. De hecho podríamos usar ambos de forma combinada, por ejemplo SdkMan para instalar Java y jEnv para determinar la versión de Java en función del directorio en el que nos encontramos (SdkMan define uno por defecto y lo puedes cambiar para una Shell, pero no para un directorio concreto).
2. Entorno
El tutorial está escrito usando el siguiente entorno:
- Hardware: Portátil MacBook Pro 15» (2.5 GHz Intel i7, 16GB 1600 Mhz DDR3, 500GB Flash Storage).
- AMD Radeon R9 M370X
- Sistema Operativo: macOS Sierra 10.12.3
- SdkMan 5.5.3+194
3. Instalación de SdkMan
La instalación es muy sencilla, basta con abrir un terminal y ejecutar:
1 |
$ curl -s "https://get.sdkman.io" | bash |
Y luego:
1 |
$ source "$HOME/.sdkman/bin/sdkman-init.sh" |
Podemos comprobar que todo ha ido bien ejecutando:
1 |
$ sdk version |
En nuestro caso hemos instalado la versión 5.5.3+194
Una de las cosas curiosas de este comando es que, tal como se ve en la imagen, no sólo nos dice la versión de SdkMan, sino las últimas versiones que tenemos disponibles para instalar. Lo podemos ver en el apartado BROADCAST.
Para ver todo lo que podemos hacer con SdkMan basta con ejecutar:
1 |
$ sdk help |
Tras la instalación se habrá modificado nuestro ~/.bash_profile
y al final del todo se habrán añadido las siguientes líneas:
También se habrá creado el directorio ~/.sdkman
donde se guarda todo lo relacionado con esta utilidad, incluidos los binarios que instalemos.
4. Instalando Java 8 y 9 con SdkMan
Para saber que cosas podemos instalar con SdkMan basta con ejecutar:
1 |
$ sdk list |
Así obtendremos la lista completa junto con la descripción de cada una de las herramientas de desarrollo que es capaz de gestionar SdkMan. Ahora mismo esta es la lista que es capaz de gestionar SdkMan recién instalado:
- Activator (1.3.10)
- Ant (1.10.0) https://ant.apache.org/
- AsciidoctorJ (220.127.116.11) http://asciidoctor.org/
- Ceylon (1.3.1) http://ceylon-lang.org/
- CRaSH (1.3.0) http://www.crashub.org/
- Gaiden (1.1) http://kobo.github.io/gaiden/
- Glide (0.9.2) http://glide-gae.appspot.com/
- Gradle (3.3) http://gradle.org/
- Grails (3.2.4) https://grails.org/
- Griffon (1.5.0) http://griffon-framework.org/
- Groovy (2.4.8) http://www.groovy-lang.org/
- GroovyServ (1.1.0) https://kobo.github.io/groovyserv/
- Java (8u121) http://www.oracle.com/technetwork/java/javase
- JBake (2.5.0) http://jbake.org/
- JBoss Forge (2.17.0.Final) http://forge.jboss.org/
- Kobalt (0.720) https://mvnrepository.com/artifact/com.beust/kobalt-plugin-api/0.720
- Kotlin (1.1-beta) https://kotlinlang.org/
- Lazybones (0.8.3) https://github.com/pledbrook/lazybones/
- Leiningen (2.7.1) http://leiningen.org/
- Maven (3.3.9) https://maven.apache.org/
- sbt (0.13.13) http://www.scala-sbt.org/
- Scala (2.12.1) http://www.scala-lang.org/
- Spring Boot (1.4.4.RELEASE) http://projects.spring.io/spring-boot/
- Sshoogr (0.9.25) https://github.com/aestasit/sshoogr
- Vert.x (3.3.3) http://vertx.io/
Vemos que Java está entre las herramientas que podemos instalar. Para ver que versiones están disponibles, usaremos ampliado el comando anterior:
1 |
$ sdk list java |
Ahora instalamos Java 9
con:
1 |
$ sdk install java 9ea157 |
En esta imagen podemos destacar como al principio nos pide la confirmación de la licencia de Oracle, luego se hace la descarga del archivo, y finalmente la instalación. Al final vemos en verde la confirmación de la instalación y de como se ha fijado Java 9 como la versión por defecto. Esto es porque no hay ninguna otra versión instalada, de lo contrario nos preguntaría si la versión que estamos instalando queremos fijarla por defecto o no.
Ahora instalamos Java 8
con:
1 |
$ sdk install java 8u121 |
Igual que antes nos pide la aceptación de la licencia de Oracle, luego hace la descarga y luego la instalación. La diferencia es que ahora sí que nos pregunta si queremos hacer que esta sea la versión por defecto (le contestamos que sí).
Si volvemos a listar las versiones de Java deberíamos ver lo siguiente:
1 |
$ sdk install java 8u121 |
Con un *
vemos las versiones que están instaladas, y con >
vemos la versión que está fijada en la Shell donde ejecutamos el comando.
5. Cambiando entre versiones de Java con SdkMan
Una vez fijada la versión por defecto, esta será la usada por todo el sistema. Si queremos usar otra de las versiones instaladas basta con ejecutar:
1 |
$ sdk use java 9ea157 |
A partir de aquí, en esta Shell la versión de Java activa será la 9. Lo podemos ver en la misma imagen como hacemos un mvn --version
y vemos que la versión activa es ciertamente la 9-ea, y como el JAVA_HOME
está fijado al directorio ~/.sdkman/candidates/java/9ea157
Esta magia se consigue básicamente manipulando la variable de entorno PATH
y con algunos enlaces simbólicos.
Esta parte del PATH es la que menos me gusta porque mientras más herramientas instalemos más «ensuciamos» la variable PATH
(en la imagen vemos como está instalado maven
, java
y gradle
). Pero es un pequeño precio a pagar por toda la funcionalidad que nos ofrece.
6. Conclusiones
SdkMan es un claro ejemplo de como se influencian unos lenguajes a otros. En este caso SdkMan, o como se conocía en sus inicios GVM (the Groovy enVironment Manager), se inspira en el RVM y rbenv de Ruby. Teniendo en cuenta la habitual lucha que hay entre lenguajes y plataformas, me parece un acierto y una alegría que en vez de trollear se aprovechen y se copien las buenas ideas.
Y desde luego ahora, gracias a SdkMan, no tenéis excusa para no instalar Java 9 y empezar a trastear ¡Buena caza y largas lunas!
7. Sobre el autor
Alejandro Pérez García (@alejandropgarci)
Ingeniero en Informática (especialidad de Ingeniería del Software) y Certified ScrumMaster
Socio fundador de Autentia Real Business Solutions S.L. – «Soporte a Desarrollo»
Socio fundador de ThE Audience Megaphone System, S.L. – TEAMS – «Todo el potencial de tus grupos de influencia a tu alcance»