
This does the heavy lifting of adding GraalVM native image support to Java projects, handling the tedious configuration cycle that usually takes hours. It detects your build tool and framework, adds the right plugins and profiles to your pom.xml or build.gradle, then actually runs the build and iterates through the inevitable reflection and resource access errors. Creates the META-INF configuration files you need and knows the framework-specific gotchas for Spring Boot, Quarkus, and Micronaut. Worth using when you want native images but don't want to spend your afternoon debugging cryptic GraalVM build failures and hunting down missing reflection hints.
$ npx -y skills add github/awesome-copilot --skill java-add-graalvm-native-image-support --agent claude-codeInstalls into .claude/skills of the current project.
Single source of truth for adding GraalVM Native Image to a Java project, whatever the framework. Work iteratively: configure, build, read the error, fix, rebuild, until the native build succeeds and the executable runs correctly.
Detail lives in references/; load only what the project needs:
| Topic | File |
|---|---|
| Maven / Gradle native plugin setup | references/build-tools.md |
| Reachability metadata and tracing agent | references/reachability-metadata.md |
| Common build/runtime errors and fixes | references/troubleshooting.md |
Spring Boot (AOT, -Pnative, nativeCompile, build-image) | references/spring-boot.md |
| Quarkus | quarkus-native-and-container skill (hand off); short pointer in references/quarkus.md |
| Micronaut | references/micronaut.md |
pom.xml (Maven) or build.gradle / build.gradle.kts (Gradle). Prefer the wrapper (./mvnw, ./gradlew) when present.spring-boot-starter-parent, spring-boot-maven-plugin, or org.springframework.boot Gradle pluginio.quarkus BOM/plugin or quarkus-* dependenciesio.micronaut parent/plugin or micronaut-* dependenciesMETA-INF/native-image/, native profile, application.properties native keys.java -version and native-image --version. Local native compilation needs a GraalVM JDK (with native-image) as the JDK used for the build. Container or buildpack builds (Spring Boot buildpacks via bootBuildImage/spring-boot:build-image, Quarkus container builds) compile inside a container and need no local GraalVM, only a container runtime. Check the project's Java level against the installed GraalVM version.If the framework is Quarkus, stop here and hand off to the quarkus-native-and-container skill. Container builds there need no local GraalVM.
native-image. Use a release matching the project's Java version (for example, GraalVM for JDK 21 or newer; Spring Boot 3.x/4.x need a Java 17+ baseline, see the Spring reference).sdk list java, then sdk install java <identifier> using an identifier from that list), a vendor download, or a CI action such as graalvm/setup-graalvm. Pick the version from the vendor's current download page rather than hard-coding one.build-essential, zlib1g-dev); macOS needs Xcode command line tools; Windows needs Visual Studio Build Tools. Check the current GraalVM "Native Image prerequisites" page.Per framework:
spring-boot-starter-parent only manages the native plugins' versions and configuration in its native profile, so declare native-maven-plugin and spring-boot-maven-plugin in <build><plugins> if missing (no versions needed); with Gradle, apply org.graalvm.buildtools.native next to org.springframework.boot; a custom parent needs the plugin added by hand. Do not duplicate configuration the parent already provides. See references/spring-boot.md.quarkus-native-and-container skill.org.graalvm.buildtools:native-maven-plugin) or the Gradle Plugin Portal (org.graalvm.buildtools.native) and pin it in the build file; do not copy a version from memory.| Setup | Command |
|---|---|
| Plain Maven | ./mvnw -Pnative native:compile |
| Plain Gradle | ./gradlew nativeCompile |
| Spring Boot Maven | ./mvnw -Pnative native:compile (or spring-boot:build-image for a container) |
| Spring Boot Gradle | ./gradlew nativeCompile (or bootBuildImage) |
| Micronaut Maven | ./mvnw package -Dpackaging=native-image |
| Micronaut Gradle | ./gradlew nativeCompile |
Native builds are slow and memory hungry (several GB of RAM). Capture the full output to inspect it.
RuntimeHints, Quarkus @RegisterForReflection, Micronaut @Introspected).src/main/resources/META-INF/native-image/<groupId>/<artifactId>/.--initialize-at-build-time / --initialize-at-run-time) only for specific classes.A successful build is not enough: many problems only appear at runtime.
native:test, nativeTest, Quarkus @QuarkusIntegrationTest).--report-unsupported-elements-at-runtime or verbose flags in production builds unless justified.Fetch the page for the target version; prefer it over this skill when they conflict.
Sponsors