Sicherheit geht vor!

JDeps-Plug-in für Apache Maven schützt vor internen APIs

Michael Thomas

© Shutterstock/Gunnar Pippel

Seit einiger Zeit ist klar, dass das private und offiziell nicht unterstützte API sun.misc.Unsafe entgegen der ursprünglichen Planung zumindest teilweise auch im JDK 9 enthalten sein wird. Das kürzlich veröffentlichte Apache Maven JDeps Plugin verhindert eine unabsichtliche Verwendung, indem es entsprechende Buildprozesse fehlschlagen lässt.

Vor einigen Monaten wurde die Community durch eine teils heftig geführte Diskussion erschüttert. Oracle plante damals, die interne sun.misc.Unsafe-Klasse aus Java 9 zu entfernen. Nach einigem Hin und Her ruderte der Java-Plattform-Leiter Mark Reinhold offiziell zurück: Während die meisten internen APIs im JDK 9 im Rahmen des Projekts Jigsaw in Module gekapselt und somit nicht mehr zugänglich sein werden, sollen diejenigen Teile des sun-misc-Unsafe-Pakets, für welche keine offiziell unterstützte Alternative bereit gestellt werden kann, auch weiterhin verfügbar bleiben.

Wie der frischgebackene Java-Champion Lukas Eder in seinem Artikel zu der Misere um sun.misc.Unsafe so treffend schrieb: „Es gibt einfach (fast) keine Möglichkeit, um zu verhindern, dass die Leute sich selbst ins Knie schießen“. Dieses „fast“ ist der Knackpunkt: Wie wäre es, wenn man den Entwicklern die geladene Waffe zwar nicht aus der Hand nimmt, dafür aber wenigstens den Sicherungshebel umlegt? Zumindest für das Build-Management-Tool Apache Maven besteht diese Möglichkeit nun.

Apache Maven JDeps Plugin 3.0.0

Obwohl es die Versionsnummer 3.0.0 im Namen führt, handelt es sich um das erste Release des Apache Maven JDeps Plugin. Das Projekt nutzt das im JDK 8 enthaltene Abhängigkeits-Analyse-Tool JDeps, um der Verwendung interner APIs nachzuspüren: Nach Aktivierung des Plug-ins schlägt jeder Buildvorgang fehl, wenn ein internes API genutzt wird.

Das Plug-in bietet dem Nutzer zwei Optionen: jdkinternals überprüft, ob sich der Hauptcode an irgend einer Stelle auf interne APIs bezieht; test-jdkinternals dient dem selben Zweck, allerdings im Hinblick auf den Testcode. Tritt ein Buildfehler auf, listet Maven als Teil des Outputs all jene Packages (samt Quelle), auf die sich der Code bezieht. Im Anschluss kann JDeps selbst genutzt werden, um zusätzliche Informationen über die problematischen APIs einzuholen, wobei teilweise auch auf nicht-interne Alternativen hingewiesen wird.

Aufgrund seiner Funktionsweise kann das Plug-in die Entwicklung von Projekten, die zur Zeit interne APIs nutzen – prominente Beispiele sind Spring, Hazelcast, Cassandra, Grails, Akka und Hadoop – potentiell zum Stillstand bringen. Deshalb ist es insbesondere für diejenigen Entwickler interessant, die bislang nicht auf interne APIs zurückgreifen – und sicherstellen wollen, dass dies auch in Zukunft so bleibt.

Weiterführende Informationen finden sich auf der Website des Apache-Projekts.

Aufmacherbild: safety first concept von Shutterstock / Urheberrecht: Gunnar Pippel

Verwandte Themen:

Geschrieben von
Michael Thomas
Michael Thomas
Michael Thomas studierte Erziehungswissenschaft an der Johannes Gutenberg-Universität Mainz und arbeitet seit 2013 als Freelance-Autor bei JAXenter.de. Kontakt: mthomas[at]sandsmedia.com
Kommentare

Hinterlasse einen Kommentar

Hinterlasse den ersten Kommentar!

avatar
400
  Subscribe  
Benachrichtige mich zu: