Mam trzy moduły w moim projekcie Maven (to nieco uproszczona):Dlaczego zależność z zakresem "pod warunkiem" ukryć zależności przechodnie w Maven?
- modelowych zawiera WZP odnotowany klas encji
- wytrwałość instancję EntityManager i wywołuje metody na nim
- Aplikacja tworzy wystąpienia klas w model, ustawia pewne wartości i przekazuje je do wytrwałość
modelowe i wytrwałość oczywiście zależą javax.persistence
, ale aplikacyjne nie należy, jak sądzę.
Zależność zostaje przeniesiona do sekcji najwyższego poziomu POM w sekcji dependencyManagement
, ponieważ występuje w wielu podmodulach, w których odwołuję się tylko do tego wpisu.
Co mnie zaskakuje, muszę odnieść się do zależności w application
, gdy ustawię jej zakres na provided
, podczas gdy ja nie muszę, gdy jego zasięg to compile
.
Z zakresu provided
, jeśli nie zostanie ona umieszczona w dependencies
dla aplikacji, kompilacja zakończy się niepowodzeniem z komunikatem o błędzie z javac:
com.sun.tools.javac.code .Symbol $ CompletionFailure: nie znaleziono pliku klasy dla javax.persistence.InheritanceType
Co się dzieje?
Przykro mi, ale ten tytuł wprowadza w błąd. Nie ma nic złego w "dostarczonym" zasięgu i przejściowych zależnościach, niczego nie psuje. –
@Pascal - Nie, nie ma nic * źle * z tym, ale użycie 'provided' powoduje" zerwanie "(lub raczej wyłączenie) przechodniego rozdzielczości, jak ty i james wskazaliście poprawnie. –
@Hanno Nie, nie ma. Zakres wpływa na zależności przechodnie, ale go nie niszczy. –