Maven: rimuovi una singola dipendenza transitiva

Il mio progetto include un file jar perché è elencato come una dipendenza transitiva.

Tuttavia, ho verificato non solo che non ne ho bisogno ma causa problemi perché una class all’interno dei file jar ombreggia una class di cui ho bisogno in un altro file jar.

Come posso tralasciare un singolo file jar dalle mie dipendenze transitive?

È ansible escludere una dipendenza nel modo seguente:

 org.springframework spring 2.5.6   commons-logging commons-logging    

Il modo corretto è usare il meccanismo di esclusione, tuttavia a volte potresti preferire usare il seguente trucco per evitare di aggiungere un gran numero di esclusioni quando molti artefatti hanno la stessa dipendenza transitiva che vuoi ignorare. Piuttosto che specificare un’esclusione, si definisce una dipendenza aggiuntiva con un ambito di “fornito”. Questo dice a Maven che si prenderà cura manualmente di fornire questo artefatto in fase di runtime e quindi non sarà pacchettizzato. Per esempio:

   org.springframework spring 2.5.6   commons-logging commons-logging 1.1.1 provided  

Effetto collaterale: devi specificare una versione dell’artefatto da ignorare e il suo POM sarà recuperato in fase di costruzione; questo non è il caso delle esclusioni regolari. Questo potrebbe essere un problema per te se esegui il tuo repository Maven privato dietro un firewall.

Puoi farlo escludendo esplicitamente l’artefatto problematico. Prendi la dipendenza che include il problema e contrassegnalo per essere escluso:

Dal sito di Maven:

  group-a artifact-a 1.0   group-c excluded-artifact