2022-04-26 12:07:27 +00:00
|
|
|
# Ahead Of Time (AOT) compilation for the Java Virtual Machine (JVM)
|
2021-02-18 11:10:42 +11:00
|
|
|
|
2026-01-20 21:44:51 -08:00
|
|
|
Ahead Of Time (AOT) compilation build tools such as those provided by
|
|
|
|
|
[GraalVM's `native-image`](https://www.graalvm.org/reference-manual/native-image/)
|
|
|
|
|
can require some configuration when using protobuf. Protobuf for the JVM uses
|
|
|
|
|
reflection, and some of its target classes are not possible to determine in
|
|
|
|
|
advance. This situation is unlikely to change.
|
2021-02-18 11:10:42 +11:00
|
|
|
|
2022-04-12 10:25:08 -07:00
|
|
|
[The Lite version of protobuf for the JVM](https://github.com/protocolbuffers/protobuf/blob/main/java/lite.md)
|
2026-01-20 21:44:51 -08:00
|
|
|
avoids reflection and may be better suited for use with AOT compilation tooling.
|
|
|
|
|
This Lite version was originally targeted for use on Android which has similar
|
|
|
|
|
AOT compilation goals as GraalVM's native-image tool.
|
2021-02-18 11:10:42 +11:00
|
|
|
|
|
|
|
|
## GraalVM native-image
|
|
|
|
|
|
2026-01-20 21:44:51 -08:00
|
|
|
The GraalVM `native-image` tool can be configured with options for the \
|
|
|
|
|
[Java Native Interface](https://www.graalvm.org/22.0/reference-manual/native-image/JNI/)
|
|
|
|
|
(JNI), http proxying, reflection, and other resources. While these configuration
|
|
|
|
|
options can be manually specified in JSON files, we recommend that you exercise
|
|
|
|
|
the application with
|
|
|
|
|
[the assisted configuration agent](https://www.graalvm.org/reference-manual/native-image/BuildConfiguration/#assisted-configuration-of-native-image-builds).
|
|
|
|
|
The agent will generate native-image.properties files that you add to the
|
|
|
|
|
project's META-INF/native-image/ directory. The Native Image builder uses
|
|
|
|
|
configuration options provided in META-INF/native-image/ to construct
|
|
|
|
|
native-image command line arguments.
|