2016-05-03 12 views
0

Ich muss die Injektionsreihenfolge der Maven-Abhängigkeit automatisch überprüfen. In einem Maven-Modul nehme ich zwei Abhängigkeiten mit dem gleichen Klassennamen und -paket. Eine Abhängigkeit sollte immer Priorität auf der anderen haben, dies bedeutet, dass sie wegen der Reihenfolge der Abhängigkeiten der Injektion von Maven zuerst deklariert werden muss.Überprüfung der Maven-Abhängigkeitsreihenfolge

Es ist möglich, es mit dem Abhängigkeitsbaum zu überprüfen, aber manuell, ich wünschte, es gibt eine Möglichkeit, dies automatisch zu überprüfen.

Wissen Sie, ob dies mit Maven möglich ist?

+0

Es ist nicht sehr klar, was Sie überhaupt fragen. Wenn die Klassen nicht denselben kanonischen Namen haben, sollten sie in den meisten Fällen nicht kollidieren. Warum sollte der Ladeauftrag wichtig sein? – rmlan

+0

Weil Maven die erste nimmt, die deklariert wird, wenn zwei Klassen denselben kanonischen Namen haben. Ich bin mir sicher, dass es immer das gepatchte gibt und nicht das aus dem Kern. – Rumoch

+0

Ok, dann "für den Kern ist der Paketname ch.a.product und für den Patch ist der Paketname ch.b.product" ist verwirrend, da es bedeuten würde, dass die Klassen * nicht * den gleichen kanonischen Namen haben . – rmlan

Antwort

0

Zuallererst ist "dependency injection" etwas völlig anderes und nicht verwandtes: verwaltete magische Mechanismen, um benötigte Objekte von "außen" zu übergeben, wenn Objekte konstruiert werden.

Maven kompiliert nur Code mit Abhängigkeitsregistern im Klassenpfad. Jede Variante der monkeypatched Klassen sollte erlauben, dass Ihr Code identisch kompiliert wird, so dass Sie (um Brüche zu minimieren) doppelte oder widersprüchliche Maven-Abhängigkeiten vermeiden sollten.

zuverlässig zur Laufzeit laden Wenn Maven nicht mehr beteiligt ist, ist ein ganz anderes Problem, deren Lösung hängt davon ab, wie Ihre Anwendung verpackt und ausgeführt wird. Beispielsweise sollte die Reihenfolge von Gläsern in einer typischen Klassenpfadliste zuverlässig sein, und die meisten Anwendungsserver bieten Möglichkeiten zum Angeben und Überschreiben verschiedener globaler und anwendungsspezifischer Klassenpfade miteinander.