Inleiding tot de Animal Sniffer Maven-plug-in

1. Inleiding

Tijdens het werken in Java zijn er momenten dat we meerdere taalversies tegelijkertijd moeten gebruiken.

Het is normaal dat ons Java-programma compilatietijd-compatibel moet zijn met één Java-versie (zeg - Java 6), maar dat we een andere versie (zeg - Java 8) in onze ontwikkeltools moeten gebruiken en misschien een andere versie om de applicatie uit te voeren. .

In dit korte artikel laten we zien hoe eenvoudig het is om op Java-versies gebaseerde incompatibiliteitswaarborgen toe te voegen en hoe de Animal Sniffer-plug-in kan worden gebruikt om deze problemen tijdens het bouwen te markeren door ons project te vergelijken met eerder gegenereerde handtekeningen.

2. Instelling -bron en -doelwit van de Java-compiler

Laten we beginnen met een Hallo Wereld Maven-project - waar we Java 7 op onze lokale computer gebruiken, maar we het project graag willen implementeren in de productieomgeving die nog steeds Java 6 gebruikt.

In dit geval kunnen we de Maven-compiler-plug-in configureren met bron en doelwit velden die verwijzen naar Java 6.

De "bron" veld wordt gebruikt voor het specificeren van compatibiliteit met Java-taalwijzigingen en "doelwit" veld wordt gebruikt om compatibiliteit met JVM-wijzigingen op te geven.

Laten we nu eens kijken naar de Maven-compilerconfiguratie van pom.xml:

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

Met Java 7 op onze lokale machine en Java-code die "hallo wereld" afdrukt naar de console, als we doorgaan en dit project bouwen met Maven, zal het bouwen en correct werken op een productiebox met Java 6.

3. Introductie van API-incompatibiliteiten

Laten we nu eens kijken hoe gemakkelijk het is om per ongeluk API-incompatibiliteit te introduceren.

Laten we zeggen dat we aan een nieuwe vereiste beginnen te werken en dat we enkele API-functies van Java 7 gebruiken die niet aanwezig waren in Java 6.

Laten we eens kijken naar de bijgewerkte broncode:

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

java.nio.charset.StandardCharsets werd geïntroduceerd in Java 7.

Als we nu doorgaan en de Maven-build uitvoeren, zal deze nog steeds met succes worden gecompileerd, maar mislukken tijdens runtime met een koppelingsfout op een productiedoos waarop Java 6 is geïnstalleerd.

De Maven-documentatie vermeldt deze valkuil en raadt aan om de Animal Sniffer-plug-in als een van de opties te gebruiken.

4. Rapportage van API-compatibiliteit

Animal Sniffer-plug-in biedt twee kernfuncties:

  1. Handtekeningen genereren van de Java-runtime
  2. Een project vergelijken met API-handtekeningen

Laten we nu het pom.xml om de plug-in op te nemen:

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

Hier verwijst het configuratiegedeelte van Animal Sniffer naar een bestaande Java 6-runtime-handtekening. De uitvoeringssectie controleert en verifieert ook de broncode van het project aan de hand van de gegeven handtekening en markeert als er problemen worden gevonden.

Als we doorgaan en het Maven-project bouwen, mislukt de build met de plug-in die de handtekeningverificatiefout rapporteert zoals verwacht:

[INFO] ----------------------------------------------- ------------------------- [INFO] BOUWFOUT [INFO] ----------------- -------------------------------------------------- ----- [FOUT] Kan doel org.codehaus.mojo niet uitvoeren: animal-sniffer-maven-plugin: 1.16: check (animal-sniffer) op projectvoorbeeld-animal-sniffer-mvn-plugin: handtekeningfouten gevonden. Verifieer ze en negeer ze indien nodig met de juiste annotatie.

5. Conclusie

In deze tutorial hebben we de Maven Animal Sniffer-plug-in verkend en hoe deze kan worden gebruikt om API-gerelateerde incompatibiliteit te rapporteren, indien aanwezig tijdens het bouwen.

Zoals altijd is de volledige broncode beschikbaar op GitHub.