Язык программирования Go стал популярным для написания приложений командной строки. Для этого может быть много причин, но один аспект, в котором выделяется Go, - это возможность скомпилировать программу в один нативный исполняемый файл. Это значительно упрощает распространение программы.
Программы Java традиционно было трудно распространять, потому что они требовали, чтобы на целевой машине была установлена виртуальная машина Java. Можно связать с приложением последнюю JVM, но это увеличивает размер пакета примерно на 200 МБ.
Все движется в правильном направлении: система модулей Java (JPMS), представленная в Java 9, включает утилиту jlink, позволяющую приложению создавать настраиваемую, минимизированную JRE, размер которой может составлять всего 30-40 МБ, и Java. 14 включает jpackage, которая может создать установщик, содержащий этот минимальный JRE с вашим приложением.
Тем не менее, для приложений командной строки установщик не идеален. В идеале мы хотим распространять нашу утилиту CLI как «настоящий» нативный исполняемый файл без упакованной среды выполнения. GraalVM позволяет нам делать это с помощью программ, написанных на Java.