Introduktion til Animal Sniffer Maven Plugin

1. Introduktion

Mens vi arbejder i Java, er der tidspunkter, hvor vi har brug for flere sprogversioner på samme tid.

Det er almindeligt, at vores Java-program skal være kompatibeltidskompatibelt med en Java-version (siger - Java 6), men at du skal bruge en anden version (siger - Java 8) i vores udviklingsværktøjer og en måske anden version til at køre applikationen .

I denne hurtige artikel demonstrerer vi, hvor let det er at tilføje Java-version-baserede uforenelighedsbeskyttelser, og hvordan Animal Sniffer-pluginet kan bruges til at markere disse problemer ved byggetid ved at kontrollere vores projekt mod tidligere genererede signaturer.

2. Indstilling -kilde og -mål af Java Compiler

Lad os starte med en Hej Verden Maven-projekt - hvor vi bruger Java 7 på vores lokale maskine, men vi vil gerne distribuere projektet til produktionsmiljøet, der stadig bruger Java 6.

I dette tilfælde kan vi konfigurere Maven compiler plugin med kilde og mål felter, der peger på Java 6.

Det "kilde" felt bruges til at specificere kompatibilitet med Java-sprogændringer og "mål" felt bruges til at specificere kompatibilitet med JVM-ændringer.

Lad os nu se på Maven compiler konfiguration af pom.xml:

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

Med Java 7 på vores lokale maskine og Java-kode udskriver "hej verden" til konsollen, hvis vi fortsætter med at bygge dette projekt ved hjælp af Maven, vil det bygge og arbejde korrekt på en produktionsboks, der kører Java 6.

3. Introduktion til API-inkompatibiliteter

Lad os nu se på, hvor let det er at introducere API-inkompatibilitet ved et uheld.

Lad os sige, at vi begynder at arbejde på nogle nye krav, og vi bruger nogle API-funktioner i Java 7, som ikke var til stede i Java 6.

Lad os se på den opdaterede kildekode:

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

java.nio.charset.StandardCharsets blev introduceret i Java 7.

Hvis vi nu fortsætter og udfører Maven-buildet, kompileres det stadig med succes, men mislykkes ved kørsel med linkfejl på en produktionsboks med Java 6 installeret.

Maven-dokumentationen nævner denne faldgrube og anbefaler at bruge Animal Sniffer-plugin som en af ​​mulighederne.

4. Rapportering af API-kompatibilitet

Animal Sniffer-plugin giver to kernefunktioner:

  1. Genererer underskrifter af Java-runtime
  2. Kontrollerer et projekt mod API-signaturer

Lad os nu ændre pom.xml at inkludere plugin:

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

Her henviser konfigurationsafsnittet til Animal Sniffer til en eksisterende Java 6-runtime-signatur. Også eksekveringsafsnittet kontrollerer og verificerer projektets kildekode i forhold til den givne signatur og flag, hvis der findes problemer.

Hvis vi fortsætter med at opbygge Maven-projektet, mislykkes build med plugin-rapporteringssignaturbekræftelsesfejl som forventet:

[INFO] ------------------------------------------------------- ------------------------- [INFO] BYGG FEJL [INFO] ----------------- -------------------------------------------------- ----- [FEJL] Kunne ikke udføre mål org.codehaus.mojo: animal-sniffer-maven-plugin: 1.16: check (animal-sniffer) på projekteksempel-animal-sniffer-mvn-plugin: Der blev fundet signaturfejl. Bekræft dem, og ignorér dem med den korrekte kommentar, hvis det er nødvendigt.

5. Konklusion

I denne vejledning udforskede vi Maven Animal Sniffer-plugin'et, og hvordan det kan bruges til at rapportere API-relaterede inkompatibiliteter, hvis der er noget på byggetidspunktet.

Som altid er den fulde kildekode tilgængelig på GitHub.


$config[zx-auto] not found$config[zx-overlay] not found