Skip to content
This repository has been archived by the owner on Mar 24, 2024. It is now read-only.

Latest commit

 

History

History

graalvm-native-image-static

Folders and files

NameName
Last commit message
Last commit date

parent directory

..
 
 
 
 
 
 
 
 

Теги: Docker Java Maven GraalVM Native

GraalVM Native Image (Static)

Задача

Есть проект на чистой Java 17, система сборки — Maven, разработчики хотят попробовать GraalVM Native Image

Для Maven есть Maven Native Plugin, который и позволит скомпилировать приложение в бинарный исполняемый файл формата ELF

Разработчики хотят сделать так, чтобы выбор между сборкой "обычного приложения" и Native Image осуществлялся через профили Maven, определяемые в самом проекте

По умолчанию, активным должен быть профиль, который собирает "обычное приложение" (не Native Image)

Сборка

Сборка проходит стандартным образом, через mvn package, никаких внешних зависимостей у проекта (в виде подключаемых при исполнении библиотек нет)

API

Сервер запускается на порту, указанном через параметр port или переменную окружения PORT и реагирует на команду UUID, выдавая в ответ случайный UUID

Как проверить:

  1. Подключаемся с помощью nc (netcat) по нужному порту
  2. Вводим UUID⏎, (где — Enter для отправки данных)
  3. Получаем в ответ: b022e6b9-957a-4f22-b519-2fb57ca76caf (пример)
Спойлеры: пример вызова nc для тестирования
$ nc -u localhost 9999
UUID
b022e6b9-957a-4f22-b519-2fb57ca76caf

Что нужно сделать

  1. Собрать всё с помощью Maven и Native Image (параллелить ничего не нужно, т.к. в приложении нет авто-тестов, проверок стиля кода и т.д.)
  2. Упаковать всё в Scratch
  3. Запускать приложение не от root

Реализация

В качестве реализации CI/CD пайплайна и Docker Registry можно использовать любые, например (из облачных и бесплатных), GitHub Actions и GitHub Packages

Полезные ссылки

  1. GraalVM Native Image
  2. Netcat MAN