AGENT SKILL

java-add-graalvm-native-image-support

GraalVM Native Image skill for Spring Boot, Micronaut and plain Java: detects the build tool and framework, adds native image support, builds the executable, analyzes errors, and iterates until the native build succeeds and the binary runs correctly. For Quarkus projects it only dispatches to the quarkus-native-and-container skill.

使用场景图像与多媒体
License 许可
MIT
最近更新
2026-11-13
Stars
★ 4.1w
Forks
5.3k

01 前言 Front Matter

name
java-add-graalvm-native-image-support
description
GraalVM Native Image skill for Spring Boot, Micronaut and plain Java: detects the build tool and framework, adds native image support, builds the executable, analyzes errors, and iterates until the native build succeeds and the binary runs correctly. For Quarkus projects it only dispatches to the quarkus-native-and-container skill.

02 资源文件 7

03 SKILL.md 正文

GraalVM Native Image Support

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

Step 1: Analyze the project

  1. Build tool: pom.xml (Maven) or build.gradle / build.gradle.kts (Gradle). Prefer the wrapper (./mvnw, ./gradlew) when present.
  2. Framework, from dependencies/plugins:
    • Spring Boot: spring-boot-starter-parent, spring-boot-maven-plugin, or org.springframework.boot Gradle plugin
    • Quarkus: io.quarkus BOM/plugin or quarkus-* dependencies
    • Micronaut: io.micronaut parent/plugin or micronaut-* dependencies
    • otherwise plain Java
  3. Existing native configuration: native-build-tools plugin, META-INF/native-image/, native profile, application.properties native keys.
  4. Toolchain: run 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.

Scope and JVM baseline

  • Adding native support does not authorize a JDK, framework, library, build-tool, or wrapper upgrade. Preserve the existing BOM/parent-managed versions and test conventions; ask before changing versions to solve native compatibility.
  • Run the project's existing JVM build and tests before editing. Record pre-existing failures rather than weakening checks to hide them. Keep the JVM packaging/run path working alongside native support.
  • After any approved dependency or framework change, rerun that JVM baseline before continuing with native builds. Verify the same relevant behavior on both JVM and native paths.
  • Ask before creating or changing CI workflows, adding native CI jobs, or changing runner resources. Suggest commands separately if CI changes were not requested.

Step 2: Get a GraalVM toolchain

  • Oracle GraalVM (free under the GraalVM Free Terms and Conditions) and GraalVM Community Edition builds provide 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).
  • Install with SDKMAN (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.
  • Linux needs a C toolchain and zlib headers (build-essential, zlib1g-dev); macOS needs Xcode command line tools; Windows needs Visual Studio Build Tools. Check the current GraalVM "Native Image prerequisites" page.

Step 3: Add native support

Per framework:

  • Spring Boot: with Maven, 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: hand off to the quarkus-native-and-container skill.
  • Micronaut: built in via the Micronaut build plugins. See references/micronaut.md.
  • Plain Java (or any project without a framework plugin): add the GraalVM Native Build Tools plugin. See references/build-tools.md. Resolve the plugin version at run time from Maven Central (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.

Step 4: Build

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.

Step 5: Iterate until the build succeeds

  1. Read the first real error, not the final summary.
  2. Match it against references/troubleshooting.md.
  3. Apply the smallest fix, in this order of preference:
    1. Check whether a compatible library/framework version has built-in native support (see the reachability metadata repository). Propose the upgrade; apply it only with user approval and rerun the JVM baseline. If declined, try metadata or framework hints compatible with the current versions.
    2. Use the framework's own mechanism (Spring RuntimeHints, Quarkus @RegisterForReflection, Micronaut @Introspected).
    3. Collect metadata with the tracing agent (see references/reachability-metadata.md).
    4. Hand-write metadata under src/main/resources/META-INF/native-image/<groupId>/<artifactId>/.
    5. Adjust initialization (--initialize-at-build-time / --initialize-at-run-time) only for specific classes.
  4. Rebuild. Repeat until the build completes with no errors.

Step 6: Verify the executable

A successful build is not enough: many problems only appear at runtime.

  • Run the binary and exercise the main paths (HTTP endpoints, DB access, serialization, resource loading, scheduled jobs).
  • Run the native tests where the framework supports them (native:test, nativeTest, Quarkus @QuarkusIntegrationTest).
  • Compare startup time and memory against the JVM run only if the user asks for it.
  • Report the exact commands run, whether the build and the run succeeded, and any remaining warnings.

Pitfalls

  • Recommend a native build and native test run in CI with an explicit GraalVM version; add or change CI only with user consent.
  • Mockito's default inline mock maker does not work on native image (Mockito 5.0.0 release notes); use the subclass mock maker for native tests.
  • Do not leave --report-unsupported-elements-at-runtime or verbose flags in production builds unless justified.

References

Upstream sources (read before upgrading GraalVM or native config)

Fetch the page for the target version; prefer it over this skill when they conflict.

04 同仓库更多 Skills

github
github/awesome-copilot

supabase-rls-policies

Write, review, and test Supabase Row Level Security (RLS) policies so that one user cannot read or change another user's rows. Use when creating or changing tables, policies, views, or security definer functions in a Supabase project, when reviewing a migration that touches RLS, or when asked to prove user isolation with pgTAP tests that sign in as two users.

测试与质量Skill与智能体开发
★ 4.1w
github
github/awesome-copilot

skill-distribution-audit

Audit a skill collection before release or investigate installer omissions, archived/template leakage, duplicate identities, and manifest drift. Reconcile the intended public source set, distribution manifest, and actual discovery output for a specified consumer version. Includes a deterministic set-comparison helper.

Skill与智能体开发
★ 4.1w
github
github/awesome-copilot

logicapps-custom-code-net10-migration

Migrate Azure Logic Apps Standard local-function custom-code projects from .NET 8 to .NET 10. Use for legacy Logic Apps custom-code workspace upgrades, project/package configuration, custom-worker settings, publication, and integrated VS Code debugging. Not for ordinary .NET applications, standalone Azure Functions, Consumption workflows, or cloud deployment.

开发工程师
★ 4.1w
github
github/awesome-copilot

winmd-api-search

Find and explore Windows desktop APIs. Use when building features that need platform capabilities — camera, file access, notifications, UI controls, AI/ML, sensors, networking, etc. Discovers the right API for a task and retrieves full type details (methods, properties, events, enumeration values).

开发工程师后端与接口
★ 4.1w
github
github/awesome-copilot

resemble-detect

Deepfake detection and media safety — detect AI-generated audio, images, video, and text, trace synthesis sources, apply watermarks, verify speaker identity, and analyze media intelligence using Resemble AI

后端与接口图像与多媒体
★ 4.1w
github
github/awesome-copilot

quality-playbook

Run a complete quality engineering audit on any codebase. Derives behavioral requirements from the code, generates spec-traced functional tests, runs a three-pass code review with regression tests, executes a multi-model spec audit (Council of Three), and produces a consolidated bug report with TDD-verified patches. Finds the 35% of real defects that structural code review alone cannot catch. Works with any language. Trigger on 'quality playbook', 'spec audit', 'Council of Three', 'fitness-to-purpose', or 'coverage theater'.

代码审查Skill与智能体开发
★ 4.1w