Теги: Docker
Java
Maven
GraalVM
Native
Есть проект на чистой Java 17, система сборки — Maven, разработчики хотят попробовать GraalVM Native Image
Для Maven есть Maven Native Plugin, который и позволит скомпилировать приложение в бинарный исполняемый файл формата ELF
Разработчики хотят сделать так, чтобы выбор между сборкой "обычного приложения" и Native Image осуществлялся через профили Maven, определяемые в самом проекте
По умолчанию, активным должен быть профиль, который собирает "обычное приложение" (не Native Image)
Сборка проходит стандартным образом, через mvn package
, никаких внешних зависимостей у проекта (в виде подключаемых при исполнении библиотек нет)
Сервер запускается на порту, указанном через параметр port
или переменную окружения PORT
и реагирует на команду UUID
, выдавая в ответ случайный UUID
Как проверить:
- Подключаемся с помощью
nc
(netcat
) по нужному порту - Вводим
UUID⏎
, (где⏎
— Enter для отправки данных) - Получаем в ответ:
b022e6b9-957a-4f22-b519-2fb57ca76caf
(пример)
Спойлеры: пример вызова nc для тестирования
$ nc -u localhost 9999
UUID
b022e6b9-957a-4f22-b519-2fb57ca76caf
- Собрать всё с помощью Maven и Native Image (параллелить ничего не нужно, т.к. в приложении нет авто-тестов, проверок стиля кода и т.д.)
- Упаковать всё в
Scratch
- Запускать приложение не от root
В качестве реализации CI/CD пайплайна и Docker Registry можно использовать любые, например (из облачных и бесплатных), GitHub Actions и GitHub Packages