Qual è il modo migliore per dichiarare una dipendenza Maven come solo utilizzata per il percorso di classe runtime di test (ma non per la compilazione di test)?Dichiarare la dipendenza Maven solo come runtime di prova
In particolare, voglio slf4j-api
(una facciata di registrazione) come una tipica, compilare-scope dipendenza, ma voglio slf4j-simple
(l'attuazione barebone adatto per unit test) solo sul percorso classe di test runtime (non è necessaria per la compilazione di test). Ho fatto questo:
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-api</artifactId>
</dependency>
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-simple</artifactId>
<scope>test</scope>
</dependency>
Tuttavia, il rovescio della medaglia è che i rapporti dependency:analyze
slf4j-simple
come non inviata, presumibilmente perché non è necessaria per la compilazione:
[WARNING] Unused declared dependencies found:
[WARNING] org.slf4j:slf4j-simple:jar:1.7.7:test
non posso usare un runtime
dipendenza perché non voglio che questa dipendenza sia ereditata in modo transitivo (ad es. le dipendenze downstream possono usare log4j, ecc.). Ho provato runtime
con optional=true
, ma questo ha lo stesso avvertimento.
(Si noti che ho potuto anche impostare ignoreNonCompile
per il plugin di dipendenza, ma che sembra uno strumento molto schietto che sarebbe nascondere altri problemi potenziali.)
cosa è richiesto in fase di esecuzione per la fonte principale? non si lamenterà ancora per la dipendenza dell'ambito 'runtime'? –
In generale, le dipendenze transitive non devono essere dichiarate. Per una dipendenza opzionale (tipicamente come la registrazione che può utilizzare diversi framework) la procedura è corretta. Forse puoi anche aggiungere un test di ambito. –
Si lamenta anche (erroneamente, IMHO) per una dipendenza 'runtime', quindi sembra che lo scope da solo non sia la risposta qui. Quello che voglio veramente è un ambito che è l'intersezione di 'test' e' runtime' (per quanto riguarda il percorso di classe) e che il plugin di dipendenza agisca meno stupido sulle dipendenze "inutilizzate" di runtime. –