Introduction au plugin Animal Sniffer Maven

1. Introduction

Tout en travaillant en Java, nous devons parfois utiliser plusieurs versions linguistiques en même temps.

Il est courant d'avoir besoin que notre programme Java soit compatible au moment de la compilation avec une version Java (disons - Java 6) mais d'avoir besoin d'utiliser une version différente (par exemple - Java 8) dans nos outils de développement et une version peut-être différente pour exécuter l'application .

Dans cet article rapide, nous montrerons à quel point il est facile d'ajouter des sauvegardes d'incompatibilité basées sur la version Java et comment le plugin Animal Sniffer peut être utilisé pour signaler ces problèmes au moment de la construction en comparant notre projet aux signatures précédemment générées.

2. Définition de -source et -target du compilateur Java

Commençons par un projet Maven hello world - où nous utilisons Java 7 sur notre machine locale mais nous aimerions déployer le projet dans l'environnement de production qui utilise toujours Java 6.

Dans ce cas, nous pouvons configurer le plugin du compilateur Maven avec des champs source et cible pointant vers Java 6.

Le champ «source» est utilisé pour spécifier la compatibilité avec les modifications du langage Java et le champ «cible» est utilisé pour spécifier la compatibilité avec les modifications JVM.

Regardons maintenant la configuration du compilateur Maven de pom.xml:

  org.apache.maven.plugins maven-compiler-plugin 3.7.0  1.6 1.6   

Avec Java 7 sur notre machine locale et l'impression de code Java «hello world» sur la console, si nous allons de l'avant et construisons ce projet en utilisant Maven, il se construira et fonctionnera correctement sur une boîte de production exécutant Java 6.

3. Présentation des incompatibilités d'API

Voyons maintenant à quel point il est facile d'introduire une incompatibilité d'API par accident.

Disons que nous commençons à travailler sur une nouvelle exigence et que nous utilisons certaines fonctionnalités d'API de Java 7 qui n'étaient pas présentes dans Java 6.

Regardons le code source mis à jour:

public static void main(String[] args) { System.out.println("Hello World!"); System.out.println(StandardCharsets.UTF_8.name()); }

java.nio.charset.StandardCharsets a été introduit dans Java 7.

Si nous allons maintenant de l'avant et exécutons la compilation Maven, elle sera toujours compilée avec succès mais échouera à l'exécution avec une erreur de liaison sur une boîte de production avec Java 6 installé.

La documentation Maven mentionne cet écueil et recommande d'utiliser le plugin Animal Sniffer comme l'une des options.

4. Compatibilité des API de création de rapports

Le plugin Animal Sniffer fournit deux fonctionnalités principales:

  1. Génération de signatures du runtime Java
  2. Vérification d'un projet par rapport aux signatures d'API

Modifions maintenant le pom.xml pour inclure le plugin:

 org.codehaus.mojo animal-sniffer-maven-plugin 1.16   org.codehaus.mojo.signature java16 1.0     animal-sniffer verify  check    

Ici, la section de configuration d'Animal Sniffer fait référence à une signature d'exécution Java 6 existante. En outre, la section d'exécution vérifie et vérifie le code source du projet par rapport à la signature et aux indicateurs donnés si des problèmes sont détectés.

Si nous allons de l'avant et construisons le projet Maven, la construction échouera avec le plugin signalant une erreur de vérification de signature comme prévu:

[INFO] ------------------------------------------------------------------------ [INFO] BUILD FAILURE [INFO] ------------------------------------------------------------------------ [ERROR] Failed to execute goal org.codehaus.mojo:animal-sniffer-maven-plugin:1.16:check (animal-sniffer) on project example-animal-sniffer-mvn-plugin: Signature errors found. Verify them and ignore them with the proper annotation if needed.

5. Conclusion

Dans ce didacticiel, nous avons exploré le plugin Maven Animal Sniffer et comment il peut être utilisé pour signaler les incompatibilités liées à l'API, le cas échéant, au moment de la construction.

Comme toujours, le code source complet est disponible à l'adresse over sur GitHub.