name: java-knowledge description: Base de connaissances et workflow pour Java et la JVM dans tous les domaines — bibliothèques, backends (Spring Boot, Quarkus, Micronaut), JDBC/JPA, Kafka, CLI, JavaFX, Spark, applications ML/LLM, jeux (libGDX, LWJGL), mods/plugins Minecraft (Fabric, NeoForge, Paper, mixins), embarqué. Utilisez-le pour toute question concernant du code Java, même celles qui semblent rapides à répondre de mémoire : écrire ou réviser du Java ; erreurs javac (incompatible bounds, cannot find symbol) et exceptions (ConcurrentModificationException) ; records, sealed types, pattern matching, streams ; versions JDK et JEPs ; builds Maven ou Gradle, Lombok/MapStruct qui ne fonctionnent plus ; Error Prone, NullAway, SpotBugs, Spotless ; JUnit, Mockito, Testcontainers, JaCoCo ; code lent, trames de profilage chaudes, allocations, pauses GC, démarrage lent ; JMH, JFR, async-profiler ; blocages et deadlocks, threads virtuels, CompletableFuture, commonPool, modèle mémoire Java, API FFM ; structure multi-module, JPMS ; livres Java. Inclut une bibliothèque organisée, des modèles vérifiés par CI et un pipeline d'optimisation mesuré.
Java : base de connaissances et pipeline
Ce skill aide à écrire, vérifier et accélérer le code Java dans n'importe quel domaine. Il contient trois éléments :
- Bibliothèque de connaissances. Livres, articles, présentations, documentation, JEPs, bases de code et modèles par catégorie. Chaque source est fournie avec un lien, l'auteur, l'année et une explication de son utilité.
- Chaîne d'outils. Quels JDK, outils de build et analyseurs installer, quelles commandes exécuter et dans quel ordre. Des modèles
pom.xml, Gradle et CI sont rassemblés et vérifiés. - Pipeline. Ordre de travail : tests avant le code, vérifications de qualité, benchmarks JMH, révision, recherche de solutions dans la bibliothèque et remesure.
État des connaissances — novembre 2026 : JDK 27 (septembre 2026) — dernière version, JDK 25 — LTS actuel, JDK 21 et 17 — LTS précédents, JDK 28 sortira en mars 2027. Maven 3.9.16 et 3.10.0 (Maven 4 toujours en RC), Gradle 9.9, JUnit 6.1, Spring Boot 4.1, Quarkus 3.40, JMH 1.37. Minecraft : 26.3 — dernière version (septembre 2026), 26.4 en snapshots ; depuis 26.1 le jeu est sans obfuscation et nécessite Java 25.
Où chercher
| Tâche | Fichier |
|---|---|
| Nouvelle fonctionnalité, refactoring ou optimisation : ordre de travail | references/pipeline.md |
Distributions et versions JDK, installation, Maven et Gradle, plugins, BOM, processeurs d'annotations, javac -Xlint, Error Prone, NullAway, SpotBugs, PMD, Spotless, OpenRewrite, sécurité des dépendances, outils JDK, CI, modèles | references/toolchain.md |
| JUnit 6, AssertJ, Mockito, Testcontainers, slices Spring Boot, tests basés sur les propriétés et tests contractuels, JaCoCo, PIT, tests instables | references/testing.md |
| Code lent ou gourmand en mémoire : technique par symptôme, JMH, JFR, JIT, GC, démarrage et échauffement | references/performance.md — commencez par le tableau « Symptôme → technique → source » |
| Fonctionnalités du langage Java 17–28 par JEP, idiomes, null et Optional, exceptions, patterns et anti-patterns, sécurité, checklist de révision | references/idioms-patterns.md |
| Structure de projet, builds multi-modules, paquets et JPMS, architecture en couches et hexagonale, DDD, ArchUnit, DI, évolution d'API, bases de code de référence | references/architecture.md |
| Modèle mémoire, executors, CompletableFuture, verrous, threads virtuels, concurrence structurée, scoped values, bibliothèques réactives, API FFM, JNI, Unsafe, Vector API | references/concurrency-native.md |
| Domaines serveur : Spring Boot, Quarkus, Micronaut, Helidon, REST et gRPC, JDBC, JPA et Hibernate, migrations, Kafka, observabilité, sécurité, conteneurs et Kubernetes | references/domains-server.md |
| Autres domaines : publication de bibliothèques, CLI et TUI, desktop, données, applications ML et LLM, jeux, embarqué, WebAssembly, interop, scripts | references/domains-client.md |
| Que lire, blogs, présentations, podcasts, cours, ressources en français, parcours d'apprentissage par niveaux | references/books.md. Pour une question générale sur les livres, commencez par les sections « Liste courte : 20 sources principales » et « Parcours de lecture par niveaux », ouvrez les sections thématiques via la table des matières. Le fichier est volumineux, ne le lisez pas en entier |
Branche Minecraft (Java Edition : mods et plugins serveur, Minecraft 26.x et dernière 1.21.x) :
| Tâche | Fichier |
|---|---|
| Commencer un mod : choix du chargeur (Fabric, NeoForge, Forge, Quilt), version du jeu et Java, Loom et ModDevGradle, multi-chargeur et multi-version, publication sur Modrinth et CurseForge, builds de modpacks, CI, modèles vérifiés | references/minecraft-modding.md |
| Code du mod : côtés et threads, registres, composants de données, blocs, entités, datagen, codecs, réseau, événements, mixins, access wideners et transformers, rendu, configs, génération du monde, migration vers une nouvelle version, checklist de révision | references/minecraft-mod-api.md — ce qui est cassé dans 26.x, voir la section « Ce qui est cassé dans 26.x » |
Ralentissements, TPS et MSPT, FPS, mémoire, démarrage lent ; spark et JFR ; benchmark du monde /tick sprint ; GameTest et tests unitaires ; analyse des rapports de crash et conflits de mods | references/minecraft-performance-testing.md — commencez par le tableau « Symptôme → technique → source » |
| Serveur : datapack, plugin ou mod ; Paper, Folia, Velocity, Spigot, Sponge, Minestom ; Polymer ; Geyser et ViaVersion ; ingénierie et modèles de plugins | references/minecraft-server-plugins.md |
| Documentation et sa fraîcheur, comment lire les anciens tutoriels, cours, mods de référence par type, communauté, parcours d'apprentissage | references/minecraft-resources.md |
Chaque guide commence par une table des matières. Lisez uniquement la section nécessaire, pas le fichier en entier.
Questions fréquentes et sections avec réponse :
| Question | Section |
|---|---|
| Après le passage à JDK 23+, les classes générées (Lombok, MapStruct, JMH) ont disparu, mais le build passe ; autres échecs de build non évidents | toolchain.md → « Pièges : résumé » |
| Quelle commande pour vérifier le projet avant une fusion | toolchain.md → « Vérifications minimales de qualité » |
| Que voit-on dans le profil ou le benchmark et qu'en faire | performance.md → « Symptôme → technique → source » |
| Comment écrire un benchmark qui ne mente pas | performance.md → « Benchmarks : JMH » |
| Avec quoi profiler sur Windows, Linux et macOS | performance.md → « Profilage » |
| Peut-on utiliser une fonctionnalité du langage sur notre version JDK | idioms-patterns.md → « Versions du langage : Java 17–28 » |
| Faut-il migrer le service vers les threads virtuels et que vérifier | concurrency-native.md → « Threads virtuels », pour Spring Boot 4 — aussi domains-server.md → « Frameworks et runtimes » |
| Quel modèle de concurrence choisir sous charge | concurrency-native.md → « Choix de l'outil selon la charge » |
| Qu'est-ce qui a changé dans Spring Boot 4, Jackson 3, Hibernate 7 et qu'est-ce qui a été supprimé | domains-server.md → « Versions en novembre 2026 » |
| Endpoint lent, N+1, pool de connexions | domains-server.md → « Performances du serveur : symptômes » |
| Comment diviser un projet en modules et verrouiller les frontières | architecture.md → « Règles courtes par défaut » |
| Existe-t-il un livre ou une édition | books.md → « Ce qui est sorti, ce qui est en early access et ce qui n'existe pas » |
| Minecraft : par où commencer un mod, projet prêt avec GameTest et CI | minecraft-modding.md → « Modèles », choix du chargeur — « Stack par défaut » |
Minecraft : ancien tutoriel ou mod qui ne compile pas sur 26.x (modImplementation, remapJar, ResourceLocation, Yarn) | minecraft-modding.md → « Ce qui est incorrect dans les anciens tutoriels », minecraft-mod-api.md → « Ce qui est cassé dans 26.x » |
| Minecraft : le serveur rame (MSPT, TPS), comment trouver la cause et prouver que la correction a aidé | minecraft-performance-testing.md → « Symptôme → technique → source », ordre de travail — pipeline.md → « Mods et plugins Minecraft » |
| Minecraft : datapack, plugin ou mod ; plugin Paper from scratch | minecraft-server-plugins.md → « Que choisir : datapack, plugin ou mod », « Modèles » |
Le script scripts/BenchCompare.java compare les runs JMH « avant » et « après » via leur JSON en tenant compte du bruit entre les runs et retourne le code 1 en cas de régression. Exécution sans build : java BenchCompare.java <avant> <après> sur JDK 17+. Il est nécessaire à l'étape 11 du pipeline.
Pour Minecraft, il y a deux autres scripts :
- scripts/tick_sprint_bench.sh — benchmark complet du serveur avec la commande
/tick sprint. Le résultat est écrit au format JSON JMH, donc il est comparé par le mêmeBenchCompare.java; - scripts/EmptyStructure.java — structure
.nbtvide pour GameTest. Nécessaire sur NeoForge, où il n'y a pas de structure vide par défaut.
Les scripts se trouvent dans le dossier scripts/ à côté de ce SKILL.md. Lors de l'installation pour tous les projets, c'est ~/.claude/skills/java-knowledge/scripts/, lors de l'installation dans un projet, c'est .claude/skills/java-knowledge/scripts/. Utilisez ce chemin dans les commandes des guides.
Comment travailler
Pour une tâche de plus d'une méthode, suivez le pipeline :
- Enquête.
- Plan et spécification.
- Sous-tâches.
- Tests avant le code.
- Isolation dans un worktree.
- Benchmarks.
- Mesure initiale et profil.
- Révision.
- Recherche de solutions dans la bibliothèque.
- Optimisation.
- Remesure.
Pour une petite correction, le mode court du même fichier suffit : test, code, vérifications, révision.
Avant de déclarer le travail terminé, exécutez les vérifications minimales et montrez leur sortie :
./mvnw -B -ntp verify # compilation avec -Xlint -Werror, Error Prone et NullAway, tests, Spotless, seuil JaCoCo
./mvnw -B -ntp dependency:analyze
osv-scanner scan source -r .
Sur Gradle : ./gradlew build, ./gradlew buildHealth, osv-scanner scan source -r .. Les analyseurs et seuils doivent être attachés au build — modèles dans toolchain.md. S'ils ne sont pas présents dans le projet, exécutez ce qui existe et dites quelles vérifications manquent. Si l'outil n'est pas installé, proposez la commande d'installation depuis toolchain.md, ne sautez pas l'étape en silence.
Lors de l'optimisation :
- D'abord mesurer, puis corriger. Sans ligne de base, on ne peut pas dire que le code est plus rapide.
- Mesurez avec JMH, pas avec
System.nanoTime()dans une boucle : le JIT supprime le travail inutilisé. Dans une mesure locale, un calcul avec un résultat jeté semblait 14 fois moins cher que le réel. - Prenez 5 runs « avant » et « après » avec des lancements JVM séparés, en alternant l'ordre (ABBA). Les lancements du même jar varient de 12 à 22%.
- Ajoutez toujours
-prof gcet regardezgc.alloc.rate.norm(octets par opération) : cette métrique a presque pas de bruit. - Lancez un seul JMH à la fois sur la machine et ne chargez pas la machine avec d'autre travail pendant la mesure.
- Cherchez la technique par symptôme dans performance.md et indiquez la source à côté de la correction.
- Acceptez la correction seulement si le benchmark a montré un gain significatif et que les tests sont toujours verts.
Lors de la révision, utilisez les checklists :
- idioms-patterns.md — pour tout code ;
- testing.md — pour les tests ;
- concurrency-native.md — pour le code multithread, les threads virtuels et le code natif ;
- domains-server.md — pour le code serveur, base de données et sécurité ;
- domains-client.md — pour les bibliothèques publiées ;
- architecture.md — pour la structure du projet et les frontières des modules.
Règles d'utilisation de la bibliothèque
- Citez la source. En recommandant un pattern ou une optimisation, donnez un lien depuis le guide. Ainsi l'utilisateur peut vérifier le conseil et la solution ne semble pas inventée.
- Tenez compte des annotations.
[obsolète]signifie que le matériau a un remplacement, indiqué à côté.[non vérifié]signifie que l'affirmation provient d'une source secondaire unique ; il convient de la revérifier avant de bâtir une solution dessus. - Vérifiez les versions. Les versions sont données pour novembre 2026. En 2025–2026, de nombreuses versions majeures avec des changements cassants sont sorties : Spring Boot 4 et Spring Framework 7 (starters renommés, API supprimées), Jackson 3 (paquets
tools.jackson), Hibernate 7, JUnit 6, Testcontainers 2 (nouveaux artefacts et paquets), google-java-format 2. La publication via OSSRH est fermée depuis le 30 juin 2025. Avant des décisions importantes, vérifiez avec Maven Central, la documentation et les notes de version. - Tenez compte de la version Java cible. Précisez
maven.compiler.releaseou toolchain dans Gradle avant de