Welche Möglichkeiten gibt es, Einschränkungen für die Paketabhängigkeiten in einem Java-Build-System durchzusetzen? Zum Beispiel sollte die Klasse myapp.server.bl.Customer
nicht auf das Paket myapp.client.ui.customlayout
verweisen dürfen.
Ich interessiere mich für Ant-basierte oder IDE-spezifische Lösungen.
Ich möchte eine Fehlermeldung im Build erhalten, die anzeigt, dass eine (benutzerdefinierte) Paketabhängigkeitsregel verletzt wurde und der Build abgebrochen wurde. Ich möchte auch die Abhängigkeiten in einer Liste, vorzugsweise in einer Textdatei, außerhalb der Ant-Skripte oder IDE-Projektdateien pflegen.
(Ich kenne Maven nicht, aber ich habe es hier gelesen, es hat eine bessere Unterstützung für das Modulabhängigkeitsmanagement)
Ich glaube, Checkstyle hat einen Haken dafür. Es heißt Importkontrolle
Sie können Eclipse-Projekte so konfigurieren, dass Zugriffsregeln festgelegt werden. Zugriffsregeln können die Ebenen "Verboten", "Entmutigt" und "Zugänglich" mit Wildcard-Regeln angeben. Sie können dann konfigurieren, dass Verstöße gegen Entmutigte oder Verbotene als Warnungen oder Fehler während der Erstellung gekennzeichnet werden.
Art eines alten Artikels über die Idee (Details können veraltet sein):
Wenn Sie Eclipse (oder OSGi) -Plugins verwenden, sind die "öffentlichen" Teile des Plugins / Moduls explizit definiert und dies ist Teil des Modells.
Efeu scheint eine gute Lösung für Ihr Problem zu sein (wenn Sie eine Ameise verwenden). Ivy ist die offizielle Komponente für die Abhängigkeitsverwaltung von Ant und lässt sich daher gut mit ant integrieren. Es ist in der Lage Abhängigkeiten aufzulösen, Konflikte zu behandeln, Ausschlüsse zu erstellen und so weiter.
Es verwendet eine einfache XML-Struktur, um die Abhängigkeiten zu beschreiben, und ist einfacher zu benutzen als Maven, weil es nur versucht, Probleme mit der Abhängigkeitsauflösung zu lösen.
Von der Ivy Homepage:
Ivy ist ein Werkzeug zum Verwalten (Aufzeichnen, Verfolgen, Auflösen und Berichten) von Projektabhängigkeiten. Es zeichnet sich durch Folgendes aus:
Für IDE-spezifische Lösungen bietet IntelliJ IDEA ein Tool zur Analyse von Abhängigkeiten, mit dem auch ungültige Abhängigkeiten definiert werden können. Ссылка
Die Abhängigkeitsverletzung wird sowohl beim Kompilieren als auch während der Bearbeitung der abhängigen Klasse angezeigt (als Fehler- / Warnstreifen in der rechten Fehlerleiste).
Noch mehr Automatisierung kann mit dem TeamCity Build Server von JetBrains erreicht werden, der Inspektions-Builds ausführen und die oben konfigurierten Prüfungen melden kann.
Für eine weitere IDE-unabhängige Lösung kann AspectJ verwendet werden, um ungültige Abhängigkeiten zu deklarieren (und den Schritt in den Build-Prozess zu integrieren, um Warn- / Fehlerinformationen für die Probleme zu erhalten).
Sie können mehrere Module in IDEA oder Maven oder mehrere Projekte in Eclipse und Gradle verwenden. Das Konzept ist in allen Fällen dasselbe.
Eine triviale Interpretation wäre ein Modul für myapp.server.bl und ein anderes für myapp.client.ui.customlayout mit keinerlei Abhängigkeiten bei der Kompilierung zwischen beiden. Jetzt wird jeder Versuch, Code oder Code-Complete gegen das gegenteilige Modul / Projekt zu kompilieren, wie gewünscht fehlschlagen.
Um zu prüfen, wie umfangreich das Problem bereits ist, ist ein nützlicher Ausgangspunkt für IntelliJ IDEA Analysieren von Abhängigkeiten :
In diesem Artikel erfahren Sie, wie Sie die Abhängigkeitsanalyse für Ihr Projekt ausführen und darauf reagieren.
Tags und Links java build-process dependency-management