Ich habe drei Module in meinem Maven-Projekt (das etwas vereinfacht):Warum versteckt eine Abhängigkeit mit dem Geltungsbereich "bereitgestellt" transitive Abhängigkeiten in Maven?
- Modell enthält JPA Entitätsklassen kommentierten
- Persistenz instanziiert ein EntityManager und ruft Methoden auf sie
- Anwendung erstellt Instanzen der Klassen in Modell, setzt einige Werte und übergibt sie an Persistenz
Modell und Persistenz offensichtlich auf javax.persistence
ab, sondern Anwendung nicht, glaube ich.
Die -Abhängigkeit wird in den Abschnitt dependencyManagement
der obersten Ebene von POM verschoben, weil sie in einer Reihe von Submodulen auftritt, in denen ich nur diesen Eintrag referenziere.
Was mir überraschend ist, dass ich die Abhängigkeit in application
verweisen, wenn ich ihren Anwendungsbereich auf provided
gesetzt, während ich nicht haben, wenn ihr Umfang compile
.
Mit einem Umfang von provided
, wenn ich es nicht Liste der dependencies
für Anwendung, schlägt die Build mit einer Fehlermeldung von javac:
com.sun.tools.javac.code .Symbol $ CompletionFailure: Klassendatei für javax.persistence.InheritanceType nicht gefunden
Was ist los?
Es tut mir leid, aber dieser Titel ist irreführend. Es ist nichts falsch mit dem "bereitgestellten" Umfang und den transitiven Abhängigkeiten, es macht nichts kaputt. –
@Pascal - Nein, es gibt nichts * Falsches * damit, aber mit 'zur Verfügung gestellt' wird die transitive Auflösung "gebrochen" (oder besser, ausgeschaltet), wie Sie und James richtig hingewiesen haben. –
@Hanno Nein, tut es nicht. Scope beeinflusst transitive Abhängigkeiten, bricht sie jedoch nicht. –