Source code of my website
1
fork

Configure Feed

Select the types of activity you want to include in your feed.

📝 : add draft post on avro and jspecify configuration

+79
+79
content/posts/drafts/avro-jspecify/index.md
··· 1 + --- 2 + date: 2026-02-10 3 + title: Apache Avro et JSpecify 4 + draft: true 5 + --- 6 + 7 + La majorité des projets Java utilisant des communications Kafka s'appuie sur le format Avro. 8 + 9 + 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. 10 + 11 + 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. 12 + 13 + Les classes peuvent ensuite être utilisées dans le code applicatif. 14 + 15 + ## Configurer le plugin Maven Avro pour JSpecify 16 + 17 + Le guide [Getting Started (Java)](https://avro.apache.org/docs/1.12.0/getting-started-java/) propose la configuration minimale suivante : 18 + 19 + ```xml 20 + <plugin> 21 + <groupId>org.apache.avro</groupId> 22 + <artifactId>avro-maven-plugin</artifactId> 23 + <version>1.12.0</version> 24 + <configuration> 25 + <sourceDirectory>${project.basedir}/src/main/avro/</sourceDirectory> 26 + <outputDirectory>${project.basedir}/src/main/java/</outputDirectory> 27 + </configuration> 28 + <executions> 29 + <execution> 30 + <phase>generate-sources</phase> 31 + <goals> 32 + <goal>schema</goal> 33 + </goals> 34 + </execution> 35 + </executions> 36 + </plugin> 37 + ``` 38 + 39 + Le goal `schema` est donc invoqué lors de la phase `generate-sources` de Maven (avant la compilation du code). 40 + 41 + Pour activer le support des annotations JSpecify, il faut ajouter 3 paramètres de configuration : 42 + 43 + * `createNullSafeAnnotations` pour activer la génération des annotations (annotations JetBrains par défaut) 44 + * `nullSafeAnnotationNullable` pour indiquer quelle annotation `@Nullable` doit être utilisée 45 + * `nullSafeAnnotationNotNull` pour indiquer quelle annotation `@NonNull` doit être utilisée 46 + 47 + Ce qui donne le paramétrage complet suivant : 48 + 49 + ```xml 50 + <plugin> 51 + <groupId>org.apache.avro</groupId> 52 + <artifactId>avro-maven-plugin</artifactId> 53 + <version>1.12.0</version> 54 + <configuration> 55 + <sourceDirectory>${project.basedir}/src/main/avro/</sourceDirectory> 56 + <outputDirectory>${project.basedir}/src/main/java/</outputDirectory> 57 + <!-- JSpecify support --> 58 + <createNullSafeAnnotations>true</createNullSafeAnnotations> 59 + <nullSafeAnnotationNullable>org.jspecify.annotations.Nullable</nullSafeAnnotationNullable> 60 + <nullSafeAnnotationNotNull>org.jspecify.annotations.NonNull</nullSafeAnnotationNotNull> 61 + </configuration> 62 + <executions> 63 + <execution> 64 + <phase>generate-sources</phase> 65 + <goals> 66 + <goal>schema</goal> 67 + </goals> 68 + </execution> 69 + </executions> 70 + </plugin> 71 + ``` 72 + 73 + 74 + 75 + ## Liens et références 76 + 77 + * Guide officiel de démarrage Avro pour Java : [Getting Started (Java)](https://avro.apache.org/docs/1.12.0/getting-started-java/) 78 + * Le [commit sur GitHub](https://github.com/apache/avro/commit/067c44024c3db832e731c051ba0178f0c4f18a04) qui a apporté le support des annotations null-safe 79 + * La javadoc du plugin Maven Avro : https://avro.apache.org/docs/1.12.0/api/java/org/apache/avro/mojo/AbstractAvroMojo.html