Développement d'application Quarkus
Portée : code applicatif au sein d'un projet Quarkus existant. La création de projet est create-quarkus-project ; les Dev Services et tests sont quarkus-dev-services-and-testing ; les images natives et conteneurs sont quarkus-native-and-container ; la conception de mapping JPA et requêtes core peut utiliser la skill optionnelle java-hibernate-jpa si installée (sinon voir le guide Hibernate ORM, https://quarkus.io/guides/hibernate-orm, et la documentation Jakarta Persistence).
Règles de l'agent
- Détection en premier : lire
pom.xml/build.gradlepourquarkus.platform.version, la release Java, et les extensions déjà présentes. Conserver la version ; utiliser ce que le projet utilise déjà (par exemplequarkus-resteasy*reste s'il est présent). - Ajouter des extensions avec
quarkus extension add <name>ou./mvnw quarkus:add-extension -Dextensions=<name>; ne jamais deviner les artifact ids ou versions à la main (le platform BOM les gère). Lister les candidats avecquarkus extension list --installable --search=<text>. - Demander à l'utilisateur avant d'ajouter Kafka, OIDC/Keycloak ou toute nouvelle dépendance infrastructure (ils lancent des conteneurs en dev/test et changent les besoins de déploiement).
- Ne jamais utiliser les extensions de compatibilité Spring (
quarkus-spring-*) sauf si le projet le fait déjà. - Vérifier en dev mode (
./mvnw quarkus:dev, puis/q/dev-ui) et./mvnw verify; écrire un@QuarkusTestpar feature. Ne pas affirmer que quelque chose fonctionne sans l'avoir exécuté. - Utiliser les imports
jakarta.*, les records pour les DTOs, les ressources fines déléguant aux services. - Ne jamais coder en dur les secrets ou ajouter les credentials à
application.properties; voirreferences/config-cdi.md.
Décisions rapides
| Besoin | Utiliser | Détails |
|---|---|---|
| API REST JSON | quarkus-rest-jackson, quarkus-hibernate-validator, quarkus-smallrye-openapi |
references/rest.md |
| Configuration typée | @ConfigMapping ; @ConfigProperty pour les valeurs uniques |
references/config-cdi.md |
| Beans | @ApplicationScoped (défaut), @Singleton seulement pour les holders stateless simples |
references/config-cdi.md |
| Base de données | quarkus-hibernate-orm-panache + driver JDBC, pattern repository |
references/persistence.md |
| Async / blocking | Impératif par défaut ; @RunOnVirtualThread ou Uni si nécessaire |
references/reactive-messaging.md |
| Messaging | quarkus-messaging-kafka (SmallRye Reactive Messaging) |
references/reactive-messaging.md |
| AuthN/AuthZ | quarkus-oidc, @RolesAllowed |
references/security-oidc.md |
| Ops | quarkus-smallrye-health, quarkus-micrometer-registry-prometheus, quarkus-opentelemetry, quarkus-smallrye-fault-tolerance |
references/observability-resilience.md |
| HTTP sortant, scheduling, caching | quarkus-rest-client-jackson, quarkus-scheduler, quarkus-cache |
references/observability-resilience.md |
Pièges coûteux en temps
- Quarkus résout CDI à la compilation : un bean inutilisé peut être retiré. Les beans cherchés uniquement par programmation ont besoin de
@Unremovable. - Ne pas lire ou écrire les champs publics d'un bean normal-scoped (
@ApplicationScoped) depuis un autre bean ou test : on atteint le client proxy, pas l'instance (vérifié : un champ compteur lu via le proxy retournait 0). Utiliser des méthodes. - Ne pas bloquer sur la boucle d'événements (méthodes
@NonBlocking, types de retourUni/Multis'exécutant sur les threads I/O). Retirer tout@NonBlockingexistant de la méthode (le combiner avec@Blockingou@RunOnVirtualThreadfait échouer la compilation), puis ajouter@Blockingou@RunOnVirtualThread(voirreferences/reactive-messaging.md). - Les changements aux propriétés de compilation exigent une recompilation ; les propriétés runtime peuvent être surchargées par des variables d'env (
QUARKUS_DATASOURCE_JDBC_URL). - Ne pas configurer les URLs pour bases de données/brokers/Keycloak en
%dev/%test: cela désactive les Dev Services. drop-and-createest pour dev/test seulement ; utiliser Flyway ou Liquibase pour la production.
Vérifié sur Quarkus 3.40.1 et 3.27.6 (cible Java 21, Maven) avec une app scaffoldée et mvn verify (15 tests : REST+validation+mapper, OpenAPI, config mapping, Panache sur Dev Services PostgreSQL, round trip Kafka Dev Service, tokens Keycloak Dev Service, health, metrics, fault tolerance, cache, scheduler). Recouper les noms par rapport à la version du projet.