2012-01-16 15 views
13

Sto usando maven-shade-plugin per un semplice progetto maven, il plugin include correttamente tutte le dipendenze in un vaso "ombreggiato" finale. Il processo funziona bene ogni volta e produce esattamente ciò di cui ho bisogno.Avvisi superflui quando si utilizza il plugin maven-shade

Quando si esegue la "prima" volta (dopo un clean), il plug-in è silenzioso e produce pochissimi risultati. Tuttavia, quando riesegui (senza un clean dall'ultima build), ci sono molti messaggi di avviso come questo;

[WARNING] We have a duplicate package/a/b/foo.class 
[WARNING] We have a duplicate package/c/d/bar.class 

Questi sono solo messaggi di avviso e l'artefatto finale funziona correttamente.

La mia domanda è semplice: come posso risolvere il problema in modo sicuro o sopprimere questi messaggi di avviso senza dover eseguire prima un clean?


nota: Una possibile soluzione potrebbe essere quella di passare alla Maven-assemblaggio-plugin, ma io preferirei non perché la configurazione per Maven-ombra-plugin è molto bello e semplice .

+1

Suppongo che i duplicati riportati siano tutte le classi di dipendenza, giusto? In tal caso, molto probabilmente verranno prima estratti in una cartella, quindi potresti voler aggiungere un passaggio pulito per quelle cartelle prima o dopo la fase del pacchetto (a seconda se hai bisogno di quelle classi tra le build). – Thomas

+0

Ho la stessa domanda di cui sopra ... come sopprimere gli avvertimenti. Nel mio caso includo dipendenze da numerosi barattoli del pacchetto Spring su cui non ho alcun controllo - cioè non posso "pulire" prima. –

+0

Questo è esattamente il mio problema! [Oh caro!] (Http://xkcd.com/979/) – plasma147

risposta

10

Questo perché ombreggia i file in un barattolo già ombreggiato.

La prima volta che si esegue il pacchetto dopo un clean, verrà creato il jar. La seconda volta che lo esegui, non si preoccupa di come il barattolo esista già.

Dal punto di vista dei plug-in non si sa che questo è già stato ombreggiato, quindi cerca di aggiungere nuovamente le classi.

possiamo costringere Maven per creare il vaso ogni configurando il plugin vaso:

<plugin> 
    <groupId>org.apache.maven.plugins</groupId> 
    <artifactId>maven-jar-plugin</artifactId> 
    <version>2.4</version> 
    <configuration> 
    <forceCreation>true</forceCreation> 
    </configuration> 
</plugin> 

E questo funziona per me. O semplicemente, o semplicemente esegui un'installazione pulita

+0

Grazie per questo suggerimento, fastidioso ma funziona. –

+0

Grazie per questo. C'è un altro modo per far sì che il plugin usi il jar 'original'? Non capisco la dinamica tra 'maven-jar-plugin' e' maven-shade-plugin' –

Problemi correlati