From 7e61d473356a3328de5d055fb65e45c33cad106f Mon Sep 17 00:00:00 2001 From: Julien WITTOUCK Date: Tue, 10 Feb 2026 18:08:26 +0100 Subject: [PATCH] =?UTF-8?q?=F0=9F=93=9D=20:=20add=20draft=20post=20on=20av?= =?UTF-8?q?ro=20and=20jspecify=20configuration?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- content/posts/drafts/avro-jspecify/index.md | 79 +++++++++++++++++++++ 1 file changed, 79 insertions(+) create mode 100644 content/posts/drafts/avro-jspecify/index.md diff --git a/content/posts/drafts/avro-jspecify/index.md b/content/posts/drafts/avro-jspecify/index.md new file mode 100644 index 0000000..7d25758 --- /dev/null +++ b/content/posts/drafts/avro-jspecify/index.md @@ -0,0 +1,79 @@ +--- +date: 2026-02-10 +title: Apache Avro et JSpecify +draft: true +--- + +La majorité des projets Java utilisant des communications Kafka s'appuie sur le format Avro. + +Ce format est très pratique, puisqu'il permet de bien définir la structure des échanges avec un schéma de données partagé, peut assurer la compatibilité (ascendante ou descendante) des consommateurs, et est plutôt efficace sur les échanges avec la sérialisation en binaire. + +Le plugin Maven Avro (qui n'est pas très bien documenté) permet de générer les classes Java à partir d'un schéma. + +Les classes peuvent ensuite être utilisées dans le code applicatif. + +## Configurer le plugin Maven Avro pour JSpecify + +Le guide [Getting Started (Java)](https://avro.apache.org/docs/1.12.0/getting-started-java/) propose la configuration minimale suivante : + +```xml + + org.apache.avro + avro-maven-plugin + 1.12.0 + + ${project.basedir}/src/main/avro/ + ${project.basedir}/src/main/java/ + + + + generate-sources + + schema + + + + +``` + +Le goal `schema` est donc invoqué lors de la phase `generate-sources` de Maven (avant la compilation du code). + +Pour activer le support des annotations JSpecify, il faut ajouter 3 paramètres de configuration : + +* `createNullSafeAnnotations` pour activer la génération des annotations (annotations JetBrains par défaut) +* `nullSafeAnnotationNullable` pour indiquer quelle annotation `@Nullable` doit être utilisée +* `nullSafeAnnotationNotNull` pour indiquer quelle annotation `@NonNull` doit être utilisée + +Ce qui donne le paramétrage complet suivant : + +```xml + + org.apache.avro + avro-maven-plugin + 1.12.0 + + ${project.basedir}/src/main/avro/ + ${project.basedir}/src/main/java/ + + true + org.jspecify.annotations.Nullable + org.jspecify.annotations.NonNull + + + + generate-sources + + schema + + + + +``` + + + +## Liens et références + +* Guide officiel de démarrage Avro pour Java : [Getting Started (Java)](https://avro.apache.org/docs/1.12.0/getting-started-java/) +* Le [commit sur GitHub](https://github.com/apache/avro/commit/067c44024c3db832e731c051ba0178f0c4f18a04) qui a apporté le support des annotations null-safe +* La javadoc du plugin Maven Avro : https://avro.apache.org/docs/1.12.0/api/java/org/apache/avro/mojo/AbstractAvroMojo.html \ No newline at end of file -- 2.51.2