TL; DR: SDKMAN CLI se reescribirá en GolangHan pasado seis años desde que lanzamos la primera versión de SDKMAN. En versiones anteriores, se conocía como GVM y se usaba para administrar Groovy y herramientas relacionadas. Pronto se hizo evidente que no debería limitarse al ecosistema Groovy, y también podría aplicarse a otros SDK de JVM. En este punto, el GVM pasó a llamarse SDKMAN. Aunque el nombre ha cambiado, la tecnología central sigue siendo la misma.
Del mismo modo que GVM una vez superó su nombre, SDKMAN superó la tecnología con la que se creó. A pesar de que los servicios de fondo se han reemplazado por mejores alternativas, el cliente CLI se ha mantenido igual y se ha convertido en nuestra mayor fuente de decepción.
Al principio, elegimos Bash para crear el GVM porque cubría todos los requisitos. Estaba disponible en todos los sistemas * nix, funcionó rápidamente y nos proporcionó un entorno de tiempo de ejecución sin dependencias ni gastos adicionales. Esto significaba que descargar una nueva instalación era prácticamente sin esfuerzo en casi cualquier sistema.
A pesar de los beneficios que nos dio Bash, con el tiempo, encontramos muchos problemas con esta elección:
- Los usuarios de Windows deben saltar los aros instalando Cygwin / Git Bash
- nuestro software no siempre funciona bien con conchas alternativas como la concha de pescado
- los trucos especiales deben ser compatibles para la compatibilidad con ZSH
- incompatibilidad entre las principales versiones de Bash (y la obstinada negativa de Apple de enviar OSX con una versión moderna de Bash debido a problemas de licencia tontos)
- problemas de red debido al uso de curl como el principal cliente http
- dificultades con la prueba efectiva del código Bash
Todo esto nos dice que es hora de abandonar Bash en favor de otra cosa, por lo que en los últimos meses comencé a estudiar Go como una alternativa viable. Después de sopesar las probabilidades, las ventajas de la implementación de CLI en Go se pueden resumir de la siguiente manera:
- lenguaje compilado estáticamente tipado para detectar errores durante el desarrollo
- increíblemente rápido
- ya no es adicto a la sacudida del suelo inestable bajo los pies
- crea binarios compilados de forma nativa para todas las arquitecturas, eliminando efectos secundarios inesperados relacionados con la plataforma
- Soporte más fácil para las pruebas de aceptación a través de Godog (versión de Cucumber escrita en Go)
- le permite repensar algunos comportamientos de la implementación actual de SDKMAN (más sobre esto más adelante)
- Mejora la colaboración y el aporte de la comunidad.
- simple y nos permite hacer este maldito trabajo (hacer mierda)
Entendiendo todo esto, decidí construir la
primera versión de trabajo de la nueva
interfaz SDKMAN CLI . Después de completar este trabajo, la nueva versión se convertirá en la versión estándar de SDKMAN. Por supuesto, esto también nos permitirá reconsiderar cómo está funcionando actualmente. Seis años después, aprendimos que funciona y no funciona, y podemos recordar este conocimiento en nuestra nueva versión brillante.
Aquí alentamos a nuestra comunidad a unirse y formar parte de la comunicación. Queremos saber qué características le gustaría ver (o no). Para hacer esto, abrimos una nueva habitación en
Gitter . Te invitamos a unirte y participar dando tu opinión sobre la nueva CLI. Todavía usamos Cucumber para describir el comportamiento en un lenguaje comprensible de la misma manera que con la versión Bash, y les pedimos a todos que participen en la implementación de cada función. Como antes, queremos que
estas funciones compongan documentación en vivo.
Por eso llamé a esta publicación así. Nos gustó desarrollar la versión original de SDKMAN, pero nos dimos cuenta de que tenía problemas. Ahora tenemos la oportunidad de hacerlo más confiable y mejorarlo para todos. Estaremos encantados de cualquier ayuda en el camino hacia la implementación de la nueva CLI.
De un traductor: SDKMAN es uno de mis administradores de paquetes favoritos, comienza a instalar JVM, Gradle y Kotlin en una nueva máquina. Es por eso que, recientemente, en CUBA Platform comenzamos a publicar nuestra utilidad CUBA CLI en SDKMAN. Hice esta traducción porque me alegra ver el desarrollo de SDKMAN y espero con ansias su nueva versión.