2009-06-23 9 views
33

A causa delle dipendenze transitive, le mie guerre vengono popolate da xml-apis, xerces jars. Ho provato a seguire le istruzioni sulla pagina di riferimento per maven-war-plugin ma non funziona.Come escludere i gars generati dal plugin di guerra di Maven?

<plugin> 
    <groupId>org.apache.maven.plugins</groupId> 
    <artifactId>maven-war-plugin</artifactId> 
    <configuration> 
     <packagingExcludes>WEB-INF/lib/xalan-2.6.0.jar,WEB-INF/lib/xercesImpl-2.6.2.jar,WEB-INF/lib/xml-apis-1.0.b2.jar,WEB-INF/lib/xmlParserAPIs-2.6.2.jar</packagingExcludes> 
     <webXml>${basedir}/src/main/webapp/WEB-INF/web.xml</webXml> 
     <warName>project1</warName> 
     <warSourceDirectory>src/main/webapp</warSourceDirectory> 
    </configuration> 
</plugin> 

Cosa sto facendo male? Se è importante, ho scoperto che l'esperto di guerra-plugin che sto utilizzando è alla versione 2.1-alfa-1

risposta

60

è possibile contrassegnare queste dipendenze come previsto:

<dependency> 
    <groupId>xerces</groupId> 
    <artifactId>xerces</artifactId> 
    <version>2.4.0</version> 
    <scope>provided</scope> 
</dependency> 

In questo modo l'esperto sarà aggiungili al classpath della compilation, ma non li impacchettano. Si presume che esistano nel tuo contenitore servlet.

vedere di più su Maven Scopes here sotto "scope"

Modifica Se si desidera rimuovere classi aggiunte tramite dipendenze transitive si possono escludere dalla dipendenza come questo:

<dependency> 
     <groupId>org.springframework</groupId> 
     <artifactId>spring</artifactId> 
     <version>2.5.6</version> 
     <exclusions> 
       <exclusion> 
         <groupId>commons-logging</groupId> 
         <artifactId>commons-logging</artifactId> 
       </exclusion> 
     </exclusions> 
</dependency> 

(tratto da this answer)

Vedi più here

+0

Il problema è che xerces, ad esempio, è stato inserito tramite dipendenze transitive. Non voglio popolare il mio pom.xml con tutti questi filler estranei. –

+0

Ho risolto la risposta, spero che risolva il tuo problema. –

+7

non dimenticare di pacchetto con 'pacchetto mvn clean' in seguito –

5

L'ho risolto.

Rileggendo il riferimento con un po 'più di cura, ho scoperto che l'elemento packagingExcludes dovrebbero essere warSourceExcludes.

+0

Hai provato il mio suggerimento? Ti salverà dal menzionare ogni jar due volte (sia dipendenza che esclusa) –

+0

che è vero per la versione del plugin war che usi. in 2.1-alpha-2 è stato modificato in packagingExcludes. vedi http://jira.codehaus.org/browse/MWAR-135 per maggiori dettagli – Salandur

+0

Nella versione 2.1.1 del plugin funziona con: ' WEB-INF/lib/xercesImpl-2.9.1.jar, WEB-INF/lib/xml-apis-1.3.04.jar ', l'esclusione normale non sembra funzionare. Non ho provato a sovrascrivere questi deps come "forniti". – virgo47

5

A proposito dell'esclusione delle dipendenze transitive, penso che non funzioni con il transtive delle dipendenze transitive, e penso che questo potrebbe essere il caso.

Ad esempio, aggiungere la dipendenza di hibernate-core -> dom4j -> xml-apis se aggiungere esclude di xml-apis vicino alla vostra hibernate-core, ancora aggiungere xml-apis ...

2

ho avuto alcuna possibilità per modificare il file war dipendente. Avevo bisogno di evitare alcuni vecchi file jar dalla lib. Questo frammento di configurazione POM.xml funziona bene per me. Io uso Maven 2.2.

<build> 
    <plugins> 
     <!-- put aside some unwanted jars from war...--> 
     <plugin> 
      <groupId>org.apache.maven.plugins</groupId> 
      <artifactId>maven-war-plugin</artifactId> 
      <version>2.1.1</version> 
      <configuration> 
       <overlays> 
        <overlay> 
         <groupId>com.company.app</groupId> 
         <artifactId>web_app</artifactId> 
         <excludes> 
          <exclude>WEB-INF/lib/json-lib-2.2.2-jdk13.jar</exclude>         
         </excludes> 
        </overlay> 
       </overlays> 
      </configuration> 
     </plugin> 
     .... 
0

Quando si compila con Maven 3 (io ho usato 3.0.2) con fornito portata avete il problema con le dipendenze transitive (si dispone di una los di vasi all'interno del WAR). Se si utilizzano versioni precedenti di Maven (io ho usato 2.2.1), la guerra contiene ciò che è spected (non solo le dipendenze fornito

2

Per aggiungere qualche chiarimento, è assolutamente possibile escludere le dipendenze transitive. Ad esempio, se si avere una dipendenza locale su A, che ha una dipendenza da M, che a sua volta ha una dipendenza da X, quindi puoi escludere X dove specifichi la dipendenza A.

Ad esempio, dire si dipende da 'myPackageA', che dipende dalla Rampart, che dipende Xerces, allora è possibile escludere Xerces nella tua myPackageA dipendenza:

<groupId>myPackageA.dependsOnRampart.whichDependsOnXerces</groupId> 
<artifactId>someArtifact</artifactId> 
<version>2.1</version> 
<exclusions> 
    <exclusion> 
    <groupId>org.apache.xerces</groupId> 
    <artifactId>xmlParserAPIs</artifactId> 
    </exclusion> 
    <exclusion> 
    <groupId>org.apache.xerces</groupId> 
    <artifactId>xml-apis</artifactId> 
    </exclusion> 
    <exclusion> 
    <groupId>org.apache.xerces</groupId> 
    <artifactId>xercesImpl</artifactId> 
    </exclusion> 
    <exclusion> 
    <groupId>org.apache.xerces</groupId> 
    <artifactId>resolver</artifactId> 
    </exclusion> 
    <exclusion> 
    <groupId>org.apache.xerces</groupId> 
    <artifactId>serializer</artifactId> 
    </exclusion> 
</exclusions> 

Per controllare le dipendenze in seguito, eseguire ' mvn dependency: tree 'e si spera che non vedrete alcuna dipendenza xerces.

1

Vedere la risposta here. La voce packaging-excludes funziona solo con la versione plug-in maven-war 2.1-alpha-1 and above. Pertanto, potrebbe essere necessario aggiornare la versione utilizzata o, potresti preferire l'uso di un'iniezione a livello di dipendenza in quanto è più precisa l'esclusione di specifici jar.

0

È possibile farlo specificando all'interno di <packagingExcludes></packagingExcludes> all'interno di </configuration><configuration>.

<project> 
    ... 
    <build> 
    <plugins> 
     <plugin> 
     <artifactId>maven-war-plugin</artifactId> 
     <version>3.2.0</version> 
     <configuration> 
      <packagingExcludes> 
      WEB-INF/lib/ex1-*.jar, 
      WEB-INF/lib/ex2-logging-*.jar 
      </packagingExcludes> 
     </configuration> 
     </plugin> 
    </plugins> 
    </build> 
    ... 
</project> 

È possibile specificare da wild card e espressioni regolari troppo. Vedi questo link per maggiori informazioni.

Problemi correlati