Сборка и запуск jar
Dev mode — для разработки. На сервере приложение запускают собранным: Maven компилирует код, Quarkus выполняет свою обработку при сборке и складывает результат в папку, которую можно скопировать на сервер и запустить обычной Java. Для запуска на сервере нужна только JDK или JRE той же версии, что и при сборке, — Maven и исходники там не нужны.
Сборка
./mvnw packageКоманда компилирует код, запускает тесты и собирает приложение. Чтобы пропустить тесты, добавьте -DskipTests. В конце вывода (сокращено):
[INFO] --- quarkus:3.40.1:build (default-build) @ blog ---
[INFO] [io.quarkus.deployment.QuarkusAugmentor] Quarkus augmentation completed in 15593ms
[INFO] BUILD SUCCESS
Augmentation — та самая обработка при сборке: Quarkus читает аннотации, генерирует код и готовит всё, что другие фреймворки делают при каждом старте.
Что получилось
target/quarkus-app/
├── quarkus-run.jar файл для запуска
├── app/ код приложения
├── lib/ библиотеки
│ ├── boot/
│ └── main/
└── quarkus/ сгенерированные при сборке классы
Это формат fast-jar, он выбран по умолчанию. Библиотеки лежат отдельно от кода приложения, поэтому при обновлении меняется только папка app, а в Docker-образе слой с библиотеками переиспользуется.
Запуск
java -jar target/quarkus-app/quarkus-run.jarВывод сокращён:
INFO [io.quarkus] blog 1.0.0-SNAPSHOT on JVM (powered by Quarkus 3.40.1) started in 5.304s. Listening on: http://0.0.0.0:8080
INFO [io.quarkus] Profile prod activated.
INFO [io.quarkus] Installed features: [agroal, cdi, hibernate-orm, hibernate-orm-panache, hibernate-validator, jdbc-h2, micrometer, ...]
Активен профиль prod: работают настройки с %prod., Dev Services и Dev UI выключены. База — файл data/blog.mv.db из урока о подключении базы. Адрес 0.0.0.0 значит, что приложение принимает запросы со всех сетевых интерфейсов, а не только с localhost.
curl http://localhost:8080/infoОтвет: Блог Анны, постов на странице: 10, автор: неизвестен — без пометки «(разработка)», ведь %dev-настройка в prod не действует.
Настройки при запуске
Собранное приложение не нужно пересобирать ради другого порта или адреса базы. Настройки передают переменными окружения или системными свойствами Java:
QUARKUS_HTTP_PORT=9000 java -jar target/quarkus-app/quarkus-run.jar
java -Dquarkus.http.port=9000 -jar target/quarkus-app/quarkus-run.jarОбе команды запускают приложение на порту 9000.
Один файл: uber-jar
Если удобнее один файл, соберите uber-jar — jar со всеми библиотеками внутри:
./mvnw package -DskipTests -Dquarkus.package.jar.type=uber-jar
java -jar target/blog-1.0.0-SNAPSHOT-runner.jarФайл blog-1.0.0-SNAPSHOT-runner.jar весит около 50 МБ и запускается так же. Минус — при каждом обновлении копируется весь файл целиком.
Частая ошибка
Если скопировать на сервер только quarkus-run.jar, без соседних папок, запуск не удастся:
Error: Could not find or load main class io.quarkus.bootstrap.runner.QuarkusEntryPoint
Caused by: java.lang.ClassNotFoundException: io.quarkus.bootstrap.runner.QuarkusEntryPoint
quarkus-run.jar почти пустой и ссылается на lib/, app/ и quarkus/. Копируйте всю папку target/quarkus-app целиком или соберите uber-jar.