Einführung in das Animal Sniffer Maven Plugin

1. Einleitung

Während der Arbeit in Java müssen manchmal mehrere Sprachversionen gleichzeitig verwendet werden.

Es ist üblich, dass unser Java-Programm zur Kompilierungszeit mit einer Java-Version (z. B. Java 6) kompatibel ist, in unseren Entwicklungstools jedoch eine andere Version (z. B. Java 8) und möglicherweise eine andere Version zum Ausführen der Anwendung verwendet werden muss .

In diesem kurzen Artikel zeigen wir, wie einfach es ist, auf Java-Versionen basierende Inkompatibilitätsschutzmaßnahmen hinzuzufügen und wie das Animal Sniffer-Plugin verwendet werden kann, um diese Probleme beim Erstellen zu kennzeichnen, indem unser Projekt mit zuvor generierten Signaturen verglichen wird.

2. Setzen Sie -source und -target des Java Compilers

Beginnen wir mit einem Hallo-Welt- Maven-Projekt, bei dem wir Java 7 auf unserem lokalen Computer verwenden, das Projekt jedoch in der Produktionsumgebung bereitstellen möchten, in der noch Java 6 verwendet wird.

In diesem Fall können wir das Maven-Compiler-Plugin mit Quell- und Zielfeldern konfigurieren, die auf Java 6 verweisen.

Das Feld "Quelle" wird zum Festlegen der Kompatibilität mit Änderungen der Java-Sprache und das Feld "Ziel" zum Festlegen der Kompatibilität mit JVM-Änderungen verwendet.

Schauen wir uns nun die Maven-Compiler-Konfiguration von pom.xml an:

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

Wenn Java 7 auf unserem lokalen Computer und der Java-Code „Hallo Welt“ auf der Konsole drucken, wird dieses Projekt auf einer Produktionsbox mit Java 6 erstellt und funktioniert ordnungsgemäß, wenn wir es mit Maven erstellen.

3. Einführung in API-Inkompatibilitäten

Schauen wir uns nun an, wie einfach es ist, versehentlich eine API-Inkompatibilität einzuführen.

Angenommen, wir arbeiten an einer neuen Anforderung und verwenden einige API-Funktionen von Java 7, die in Java 6 nicht vorhanden waren.

Schauen wir uns den aktualisierten Quellcode an:

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

java.nio.charset.StandardCharsets wurde in Java 7 eingeführt.

Wenn wir jetzt fortfahren und den Maven-Build ausführen, wird er weiterhin erfolgreich kompiliert, schlägt jedoch zur Laufzeit mit einem Verknüpfungsfehler auf einer Produktionsbox mit installiertem Java 6 fehl.

In der Maven-Dokumentation wird diese Gefahr erwähnt und empfohlen, das Animal Sniffer-Plugin als eine der Optionen zu verwenden.

4. Berichterstellung von API-Kompatibilitäten

Das Animal Sniffer-Plugin bietet zwei Kernfunktionen:

  1. Generieren von Signaturen der Java-Laufzeit
  2. Überprüfen eines Projekts anhand von API-Signaturen

Lassen Sie uns nun die Datei pom.xml so ändern , dass sie das Plugin enthält:

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

Hier bezieht sich der Konfigurationsabschnitt von Animal Sniffer auf eine vorhandene Java 6-Laufzeitsignatur. Außerdem überprüft und überprüft der Ausführungsabschnitt den Projektquellcode anhand der angegebenen Signatur und der angegebenen Flags, wenn Probleme gefunden werden.

Wenn wir das Maven-Projekt erstellen, schlägt der Build mit dem Plugin fehl, der erwartungsgemäß einen Signaturprüfungsfehler meldet:

[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. Schlussfolgerung

In diesem Tutorial haben wir das Maven Animal Sniffer-Plugin untersucht und untersucht, wie es zum Zeitpunkt der Erstellung verwendet werden kann, um API-bezogene Inkompatibilitäten zu melden.

Wie immer ist der vollständige Quellcode auf GitHub verfügbar.