Maven / RetroLambda: Wie erkennt man Abhängigkeiten von Java 8-Klassen?

8

Hintergrund:

Wir haben maven -basiertes Java-Projekt, das auf JRE 1.7 abzielt, aber der Quellcode verwendet lambdas, daher verwenden wir retrolambda für die Umwandlung von Java 8 Quellcode in Java 7 . Außerdem verwenden wir StreamSupport Backport-Bibliothek, wenn wir Streams, Funktion. *, Optional usw. benötigen.

Bei der Verwendung von retrolambda wird die Quell- und Zielsprache des Projekts auf 1,8 konfiguriert.

Alles funktioniert gut, wenn es keine Abhängigkeiten zu Java-Klassen oder -Methoden gibt (wie java.util.stream.* , java.util.Optional oder Methoden, die in java8 wie Collection.forEach eingeführt wurden). Wenn solche Verwendungen vorhanden sind, werden Build-Pässe erstellt, die jedoch in Runtime fehlschlagen, wenn sie unter JVM von Java 8 ausgeführt werden.

Frage:

Mein Ziel ist es, den Build fehlzuschlagen, wenn solche Abhängigkeiten existieren. Gibt es eine Möglichkeit, Abhängigkeiten von neuen Java 8 Klassen / Methoden in der Build-Zeit zu erkennen?

Ich dachte über zwei mögliche Optionen nach, aber ich bin mir nicht sicher, ob einer von ihnen machbar ist:

  1. Eine Art Bytecode-Analysator zum Erkennen von Abhängigkeiten von vordefinierten Klassen und Methoden. Gibt es solche Tools / Maven Plugins?
  2. Lint ( lint4j ) Regeln. Nicht sicher, ob es möglich ist, Abhängigkeiten von Klassen / Methoden mit lint zu erkennen
Denis Itskovich 03.11.2016, 13:42
quelle

1 Antwort

5

Sie können dafür das Animal Sniffer Maven Plugin verwenden. Sie können überprüfen, ob Ihr Code nur APIs von einer bestimmten Basislinie ("Signatur") verwendet. In Ihrem Fall würden Sie die Signatur org.codehaus.mojo.signature: java17: 1.0 verwenden.

Wie andere darauf hingewiesen haben, könnten Sie auch den Bootstrap-Klassenpfad einrichten, aber a) erfordert das Einrichten eines JDK 7 und b) macht den Build etwas komplexer, da Sie auf die JDK 7-Installation verweisen müssen. Animal Sniffer ist viel einfacher zu arbeiten mit meiner Erfahrung.

    
Gunnar 03.11.2016, 21:13
quelle

Tags und Links