Native mode
Things to consider before you run your application in the native mode.
Character encodings
By default only the following Charsets
are available in the native mode (source):
Charset.defaultCharset(), US-ASCII, ISO-8859-1, UTF-8, UTF-16BE, UTF-16LE, UTF-16
If you expect your application to need any encoding not included in this set or if you see
an UnsupportedCharsetException
thrown in the native mode, please add the following entry to your
application.properties
:
quarkus.native.add-all-charsets = true
See also quarkus.native.add-all-charsets in Quarkus documentation.
Embedding resource in native executable
Resources needed at runtime need to be explicitly embedded in the built native executable. In such situations, the include-patterns
and exclude-patterns
configurations could be set in application.properties
as demonstrated below:
quarkus.camel.native.resources.include-patterns = docs/*,images/*
quarkus.camel.native.resources.exclude-patterns = docs/ignored.adoc,images/ignored.png
In the example above, resources named docs/included.adoc and images/included.png would be embedded in the native executable while docs/ignored.adoc and images/ignored.png would not.
include-patterns
and exclude-patterns
are list of comma separated Ant-path style patterns.
At the end of the day, resources matching include-patterns
are marked for inclusion at the exception of resources matching exclude-patterns
.
Registering classes for reflection
By default, dynamic reflection is not available in native mode. Classes for which reflective access is needed have to be registered for reflection at compile time.
In many cases, application developers do not need to care because Quarkus extensions are able to detect the classes that require the reflection and register them automatically.
However, in some situations Quarkus extensions may miss some classes and it is up to the application developer to register them. There are two ways to do that:
-
The
@io.quarkus.runtime.annotations.RegisterForReflection
annotation can be used to register classes on which it is used, or it can also register third party classes via itstargets
attribute. -
The
quarkus.camel.native.reflection
options inapplication.properties
:quarkus.camel.native.reflection.include-patterns = org.apache.commons.lang3.tuple.* quarkus.camel.native.reflection.exclude-patterns = org.apache.commons.lang3.tuple.*Triple
For these options to work properly, the artifacts containing the selected classes must either contain a Jandex index ({@code META-INF/jandex.idx}) or they must be registered for indexing using the {@code quarkus.index-dependency.*} options in {@code application.properties} - e.g.
quarkus.index-dependency.commons-lang3.group-id = org.apache.commons quarkus.index-dependency.commons-lang3.artifact-id = commons-lang3