Beschränken Sie die Abhängigkeiten zwischen Java-Paketen

8

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)

    
Karl 29.09.2008, 15:47
quelle

7 Antworten

6

Ich glaube, Checkstyle hat einen Haken dafür. Es heißt Importkontrolle

    
davetron5000 29.09.2008, 16:43
quelle
6

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.

    
Alex Miller 29.09.2008 17:02
quelle
3

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:

  1. Flexibilität und Konfigurierbarkeit - Ivy ist im Wesentlichen prozessunabhängig und an keine Methodik oder Struktur gebunden. Stattdessen bietet es die notwendige Flexibilität und Konfigurierbarkeit, um an eine breite Palette von Abhängigkeitsmanagement- und Build-Prozessen angepasst werden zu können.
  2. enge Integration mit Apache Ant - Ivy ist zwar als eigenständiges Tool verfügbar, arbeitet aber besonders gut mit Apache Ant zusammen und bietet eine Reihe leistungsstarker Ant-Aufgaben, von der Abhängigkeitslösung bis hin zum Abhängigkeitsbericht und zur Veröffentlichung.
bombadil 29.09.2008 20:39
quelle
3

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).

    
Andrei 30.09.2008 03:00
quelle
1

Eclipse unterstützt dies über Build Path properties / jar properties. Ich denke, dass es nur über Jar / Projekt Grenzen funktioniert.

    
basszero 29.09.2008 16:49
quelle
1

Vielleicht kann ClassSycle verwendet werden: Ссылка

    
Rostislav Matl 19.09.2011 10:59
quelle
0

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.

    
Alain O'Dea 25.03.2010 13:27
quelle