Ho tre moduli nel mio progetto Maven (questo è un po 'semplificata):Perché una dipendenza con scope "fornita" nasconde le dipendenze transitive in Maven?
- modello contiene JPA annotato classi di entità
- persistenza un'istanza di un EntityManager e chiama i metodi su di esso
- applicazione crea istanze delle classi nel modello , imposta alcuni valori e li passa a persistenza
modello e persistenza ovviamente dipendono javax.persistence
, ma applicazione non dovrebbe, penso.
La dipendenza javax.persistence
viene spostata nella sezione dependencyManagement
di POM di primo livello perché si verifica in un numero di sottomoduli in cui faccio riferimento solo a tale voce.
Ciò che mi sorprende è che devo fare riferimento alla dipendenza in application
quando imposto il suo ambito su provided
, mentre non devo quando il suo ambito è compile
.
con un ambito di provided
, se non elenco nel dependencies
per applicazione, la costruzione fallisce con un messaggio di errore da javac:
com.sun.tools.javac.code .Symbol $ CompletionFailure: file di classe per javax.persistence.InheritanceType non trovato
Cosa sta succedendo?
Mi dispiace ma questo titolo è fuorviante. Non c'è niente di sbagliato con lo scope e le dipendenze transitive fornite, non infrange nulla. –
@Pascal - No non c'è niente * sbagliato * con esso, ma usando 'provided' fa" break "(o meglio, spegni) la risoluzione transitiva, come tu e james avete indicato correttamente. –
@ Hanno No, non è così. L'ambito influenza le dipendenze transitive ma non lo infrange. –