Если вы читаете страницу Quarks native сборки, это должно быть легко: включите -- Родной
и вот мы идем! Ну… не так быстро. Совсем не так быстро, как они узнают на другой странице “Советы уроженца Кваркуса” , к сожалению, не связанной с первой (так что удачи в поиске в Google). И, мальчик, тебе нужны эти советы…
У меня это приложение счастливо работало в течение нескольких месяцев, и хотя в начале были некоторые признанные проблемы с собственным поколением в Windows, в настоящее время общее ожидание состояло в том, что оно должно работать. Поэтому я обновил все зависимости и начал болезненное трехдневное путешествие, но, эй, без боли нет выгоды, верно?
Вот что для этого требовалось:
Во-первых, у вас ведь установлен Docker, верно? И включил генерацию контейнера в параметрах JVM с
хорошо ? Что ж, если вы тоже не хотите проходить через трудности установки GraalVM (я это сделал, получил футболку), используйте параметр build JVM для создания изображения с оправкой (упоминается на родной странице Quarkus, без каких-либо объяснений, что такое “Теги оправки” )
Говоря о параметрах JVM, генерация скоро завершится сбоем из-за нехватки памяти. Кваркус по умолчанию совершает ошибки. Добавьте этот параметр JVM для увеличения кучи Java во время генерации:
На самом деле одной из первых ошибок, которые вы увидите, будет жалоба на то, что у вас нет
src/assembly/zip.xml
файл, упомянутый в собственном профиле Maven. Хорошим началом будет это:Рано или поздно у вас определенно появится исключение в журналах, которое он не может найти
org.apache.commons.ведение журнала. LogFactoryИмпл
. Независимо от того, как вы добавите его в свой pom, кварки будут творить некоторую магию отражения и постоянно терпеть неудачу. Просто забудьтеcommons-ведение журнала
и используйте рекомендованный JBoss logmanager.Знаете ли вы, что Quarks предлагает свои собственные клиенты Elasticsearch? Я тоже этого не сделал, и мне пришлось переключиться на их дистрибутив вместо официального Elasticsearch. К счастью, тот же API, более чистые зависимости (и никаких общих записей)
Этот конструктор Elasticsearch создаст статический клиент (настроенный через
application.properties
), который никому не нужен. Я имею в виду, что если вы хотите настроить хост во время выполнения, если вы хотите подписать запрос при доступе к кластеру AWS Elasticsearch… вы внезапно получите неоднозначную инъекцию. Это было легко исправить – создайте и используйте свой собственный@Named
клиент.Не удается загрузить реализацию HTTP от любого поставщика в цепочке? Это связано с тем, что многие клиенты AWS SDK v2 по какой–либо причине включают HTTP-клиент Apache только в качестве зависимости от времени выполнения – и сам Quarkus делает то же самое (в вышеупомянутом клиенте Elasticsearch). Так что добавьте его в свой pom И упомяните его КОНКРЕТНО в здании ваших клиентов!
и код Java:
Ах да, не забудьте исключить зависимость
commons-logging
– это маленькое надоедливое отродье продолжает ползти назад.Теперь настало время для сбоя вашей среды выполнения из-за отсутствия прокси-серверов, точнее, потому что “создание прокси-классов во время выполнения не поддерживается” . Не спрашивайте, почему Кварки не справляются с этим при создании собственных изображений, или, по крайней мере, предупреждайте об этом. Поэтому просто добавьте в свой
application.properties
эту строку:и новый файл
proxies.json
в вашемsrc/main/ресурсах
, содержащий именно те интерфейсы, о которых упоминалось в сообщении об ошибке. Мой был:Проблема упоминается на странице советов по использованию Quarks, но вы остаетесь наедине с собой, пытаясь понять, ЧТО и КАК поместить в указанный файл.
Пока мы находимся в
application.properties
, если в вашем коде есть какое-либо SSL-соединение (и если вы не используете Hello World, у вас будет), также поместите эту строку там:
Итак, это было мое приключение до сих пор. Приложение работает сейчас, время запуска сократилось с 3,2 с до 0,38 с и вдвое сократило объем памяти… Я жду следующего сюрприза.
Оригинал: “https://dev.to/sorincostea/building-quarkus-native-images-you-can-do-it-too-2api”