Skip to content
GraalVM Native logo

GraalVM Native

Native image compilation, reflection configuration, and build optimization.

ngxtm/devkit0installs8stars

SKILL.md

Full skill instructions

GraalVM Native Standards

Building Native Image

# Maven with Spring Boot
./​mvnw -Pnative native:compile

# Maven with Quarkus
./​mvnw package -Dnative

# Gradle
./​gradlew nativeCompile

Reflection Configuration

// Quarkus - register for reflection
@RegisterForReflection
public class User {
    private String name;
    private String email;
}

// Spring Boot - hints
@Configuration
@ImportRuntimeHints(MyRuntimeHints.class)
public class NativeConfig {}

public class MyRuntimeHints implements RuntimeHintsRegistrar {
    @Override
    public void registerHints(RuntimeHints hints, ClassLoader classLoader) {
        hints.reflection().registerType(User.class,
            MemberCategory.PUBLIC_FIELDS,
            MemberCategory.INVOKE_PUBLIC_CONSTRUCTORS,
            MemberCategory.INVOKE_PUBLIC_METHODS);
    }
}

Native Image Configuration Files

src/​main/​resources/​META-INF/​native-image/
├── reflect-config.json
├── resource-config.json
├── serialization-config.json
└── native-image.properties
// reflect-config.json
[
  {
    "name": "com.example.User",
    "allDeclaredConstructors": true,
    "allPublicMethods": true,
    "allDeclaredFields": true
  }
]
// resource-config.json
{
  "resources": {
    "includes": [
      {"pattern": "application\\.yml"},
      {"pattern": "db/​migration/​.*"}
    ]
  }
}

Performance Tips

// Use build-time initialization
@BuildTimeInit
public class Constants {
    public static final Map<String, String> CONFIG = loadConfig();
}

// Avoid runtime class loading
// DON'T: Class.forName("com.example.MyClass")
// DO: Reference classes directly

// Use static configuration
// Avoid dynamic proxies when possible

References