resources/skills/micronaut-scaffold/SKILL.md
Scaffolds a Micronaut service with @Controller, DI, health, Dockerfile, and tests.
npx skillsauth add edercnj/claude-environment micronaut-scaffoldInstall this skill globally with one command. Works with Claude Code, Cursor, and Windsurf.
3 of 9 scanners reported clean
Some scanners were skipped, did not run, or reported a non-clean status. Review each row below.
Scaffolds a complete Micronaut service module following the hexagonal architecture pattern. Produces:
Application.java entrypoint@Controller class with endpoints@Singleton service and port wiringHealthIndicator implementationapplication.yml)Dockerfile (multi-stage build)@MicronautTest)/micronaut-scaffold <ServiceName> — scaffold Micronaut service/micronaut-scaffold <ServiceName> --graalvm — include GraalVM native hints| Parameter | Required | Description |
|-----------|----------|-------------|
| ServiceName | Yes | PascalCase service name |
| --graalvm | No | Add @ReflectiveAccess and reflect-config.json for native image |
| --port | No | HTTP port (default: 8080) |
src/main/java/.../Application.java — Application entrypointsrc/main/java/.../adapter/inbound/rest/{ServiceName}Controller.java — HTTP controllersrc/main/java/.../adapter/inbound/health/{ServiceName}HealthIndicator.java — Health indicatorsrc/main/java/.../config/AppConfig.java — Configuration bindingsrc/main/resources/application.yml — Service configurationDockerfile — Multi-stage Docker buildsrc/test/java/.../adapter/inbound/rest/{ServiceName}ControllerTest.java — Integration testknowledge/stack-patterns/micronaut/index.md — Micronaut patternsknowledge/layer-templates.md — Layer templatesknowledge/architecture-hexagonal.md — Hexagonal conventionspublic class Application {
public static void main(String[] args) {
Micronaut.run(Application.class, args);
}
}
Follow knowledge/stack-patterns/micronaut/index.md §1 Controller pattern:
@Controller("/api/v1/{resource}")
public class {ServiceName}Controller {
private final {Port} port;
public {ServiceName}Controller({Port} port) {
this.port = port;
}
@Get
public List<{Response}> list() { ... }
@Post
@Status(HttpStatus.CREATED)
public {Response} create(@Valid @Body {Request} request) { ... }
}
Follow knowledge/stack-patterns/micronaut/index.md §6 Health Checks pattern.
# src/main/resources/application.yml
micronaut:
application:
name: {service-name}
server:
port: 8080
app:
feature:
enabled: true
max-items: 100
FROM eclipse-temurin:21-jdk-alpine AS build
WORKDIR /app
COPY . .
RUN mvn -B package -DskipTests
FROM eclipse-temurin:21-jre-alpine
WORKDIR /app
COPY --from=build /app/target/*.jar app.jar
RUN addgroup -S appgroup && adduser -S appuser -G appgroup
USER appuser
EXPOSE 8080
ENTRYPOINT ["java", "-jar", "app.jar"]
@MicronautTest
class {ServiceName}ControllerTest {
@Inject
{ServiceName}Client client; // Declarative HTTP client injected
@MockBean({Port}.class)
{Port} port() { return mock({Port}.class); }
@Test
void list_returnsOk() {
var result = client.list();
assertThat(result).isNotNull();
}
}
@Autowired (Spring annotation — forbidden)@Inject not needed in Micronaut)@Valid on controller request parameters/health/liveness and /health/readinessapplication.yml (no hardcoded values)knowledge/stack-patterns/micronaut/index.md — Micronaut patternsknowledge/layer-templates.md — Layer templatestools
Documentation automation v2: stack-aware generation from documentation.targets.
development
Generates or updates CI/CD pipelines per project stack with actionlint validation.
tools
Generates ADRs from architecture-plan mini-ADRs with sequential numbering and index update.
development
Formats source code; first step of the pre-commit chain (format -> lint -> compile).