Frage

Was sind die Möglichkeiten, Einschränkungen der Paketabhängigkeiten in einem Java -Build -System durchzusetzen? Zum Beispiel die myapp.server.bl.Customer Die Klasse sollte nicht auf die verweisen dürfen myapp.client.ui.customlayout Paket. Ich interessiere mich für Ant-basierte oder idespezifische Lösungen.

Ich möchte eine Fehlermeldung im Build erhalten, die angibt, 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 verwalten.

(Ich kenne Maven nicht, aber ich habe es hier gelesen, es hat eine bessere Unterstützung für das Modulabhängigkeitsmanagement)

War es hilfreich?

Lösung

Ich glaube, Checkstyle hat einen Scheck. Es heißt Importkontrolle

Andere Tipps

Sie können Eclipse -Projekte konfigurieren, um Zugriffsregeln anzugeben. Zugriffsregeln können "verboten", "entmutigt" und "zugängliche" Ebenen mit Platzhalterregeln festlegen. Sie können dann Verstöße von entmutigen oder verboten konfigurieren, um während der Builds entweder als Warnungen oder Fehler gekennzeichnet zu werden.

Eine Art alter Artikel über die Idee (Details können veraltet sein):

http://www.eclipsezone.com/eclipse/forums/t53736.html

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 (wenn Sie Ameise verwenden). Ivy ist die offizielle Abhängigkeitsmanagementkomponente von ANT und integriert sich daher gut in Ant. Es ist in der Lage, Abhängigkeiten zu lösen, Konflikte zu bewältigen, Ausschlüsse zu schaffen und so weiter.

Es verwendet eine einfache XML -Struktur, um die Abhängigkeiten zu beschreiben, und ist einfacher zu bedienen als Maven, da es nur versucht, Probleme mit Abhängigkeitslösung zu lösen.

Von der Ivy -Homepage:

Ivy ist ein Tool zum Verwalten von Projektabhängigkeiten (Aufzeichnung, Verfolgung, Auflösung und Berichterstattung). Es ist durch Folgendes gekennzeichnet:

  1. Flexibilität und Konfigurierbarkeit - Ivy ist im Wesentlichen agnostisch verarbeitet und ist nicht an eine Methodik oder Struktur gebunden. Stattdessen bietet es die notwendige Flexibilität und Konfigurierbarkeit, um an ein breites Spektrum an Abhängigkeitsmanagement- und Bauprozessen angepasst zu werden.
  2. Enge Integration mit Apache Ant - Während Ivy als eigenständiges Tool verfügbar ist, arbeitet Ivy besonders gut mit Apache -Ant, die eine Reihe leistungsstarker ANT -Aufgaben liefert, die von Abhängigkeitsauflösung bis hin zu Abhängigkeitsberichten und Veröffentlichungen reichen.

Für die IDE -spezifischen Lösungen verfügt die Intellij -Idee über ein Abhängigkeitsanalyse -Tool, mit dem man auch ungültige Abhängigkeiten definieren kann.http://www.jetbrains.com/idea/webhelp2/dependency-validation-dialog.html

Die Abhängigkeitsverletzung wird sowohl beim Kompilieren als auch beim Live angezeigt, während die abhängige Klasse bearbeitet (als Fehler-/Warnstreifen in der rechten Seitenfehlerleiste).

Noch mehr Automatisierung kann mit dem TeamCity Build -Server von JetBrains erhalten werden, mit dem Inspektionsbaufläden ausgeführt und die oben genannten konfigurierten Überprüfungen gemeldet werden können.

Für eine andere IDE -unabhängige Lösung kann Aspektj verwendet werden, um ungültige Abhängigkeiten zu deklarieren (und den Schritt in den Erstellungsprozess zu integrieren, um Warn-/Fehlerinformationen für die Probleme zu erhalten).

Eclipse unterstützt dies über Build -Pfadeigenschaften / Jar -Eigenschaften. Ich denke, es kann nur über Jar- / Projektgrenzen hinweg funktionieren.

Vielleicht ClassSycle kann verwendet werden:http://classycle.sourceforge.net/ddf.html

Sie können mehrere Module in Idea oder Maven oder mehrere Projekte in Eclipse und Gradle verwenden. Das Konzept ist in allen Fällen gleich.

Eine triviale Interpretation wäre ein Modul für myapp.server.bl und eine andere für myapp.client.ui.customlayout ohne Kompilierungszeitabhängigkeiten zwischen beiden. Jetzt schlägt jeder Versuch, Code oder Code-Complete gegen das entgegengesetzte Modul/Projekt zu kompilieren, wie gewünscht fehl.

Um zu prüfen, wie umfangreich das Problem bereits ist, ist ein nützlicher Ausgangspunkt für die Intellij -Idee Abhängigkeiten analysieren:

http://www.jetbrains.com/idea/webhelp/analyzing-dependencies.html

Aus diesem Artikel können Sie sehen, wie Sie die Abhängigkeitsanalyse für Ihr Projekt betreiben und handeln können.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top