GraalVM allows JVM libraries to include configuration for native-image
in their JAR artifacts.
See this blog post
for more details.
Akka does not do that (yet) so this repo publishes artifacts that can be used for building Akka
projects with native-image
without supplying the whole configuration in the project itself.
This artifact provides reflection
configuration for akka-actor
(based on previous work by jrudolph)
module and also substitutions to make Akka's default scheduler and Scala 2.13's
Statics.releaseFence
work with native-image
.
"com.github.vmencik" %% "graal-akka-actor" % graalAkkaVersion
This artifact provides reflection
configuration for akka-stream
module.
"com.github.vmencik" %% "graal-akka-stream" % graalAkkaVersion
This artifact provides reflection
configuration for akka-http
and also enables support for http and https protocols.
"com.github.vmencik" %% "graal-akka-http" % graalAkkaVersion
This artifact provides reflection
configuration for akka-slf4j
module.
"com.github.vmencik" %% "graal-akka-slf4j" % graalAkkaVersion
To use Akka Remote with Graal:
- configure the Artery TCP implementation
- exclude Netty and Aeron from your dependency tree
- pass the
--allow-incomplete-classpath
parameter tonative-image
Note that the configuration provided by these artifacts is not everything you will need to build
your Akka project with native-image
.
See the akka-graal-native repository for an example
of Akka HTTP service compiled into native binary. There you can see the rest of the configuration
for native-image
and also configuration for Akka itself that makes things easier.
Current version of the artifacts was tested with:
- akka-actor 2.5.25
- akka-http 10.1.8
- GraalVM 19.1.1
- Scala 2.12.8 and 2.13.0
The reflection configuration and the substitutions are tightly coupled with Akka internals and will likely need to be updated for future versions.
The artifacts are cross-published for Scala 2.13 and Scala 2.12.