2013-01-18 11 views
11

Ci sono quattro classi duplicate in due manufatti Maven da Apache: commons-beanutils:commons-beanutils:1.8.3 e commons-collections:commons-collections:3.2.1:classi duplicate in Commons-collezioni e Commons-beanutils

org.apache.commons.collections.ArrayStack 
org.apache.commons.collections.Buffer 
org.apache.commons.collections.BufferUnderflowException 
org.apache.commons.collections.FastHashMap 

è possibile sostituire uno di loro con qualche altro manufatto per evitare questa duplicazione? Ho provato a google ma non ho trovato alcuna soluzione. Problema piuttosto fastidioso

risposta

14

In questo caso, il problema non è Maven o esclusioni (che di solito è il problema) ma si sta utilizzando la versione errata di beanutils molto probabilmente.

C'è una versione del jar beanutils che include le raccolte di bean e una che non lo fa. Le dipendenze di maven per i beanutils con raccolte di bean includono raccolte di risorse comuni. Se si utilizzano le raccolte di commons da soli, utilizzare la versione principale di e include le raccolte di commons nelle dipendenze Maven.

Questo è dove si spiega un po ': http://commons.apache.org/beanutils/

Quella pagina dice questo:

commons-beanutils.jar - contains everything 
commons-beanutils-core.jar - excludes Bean Collections classes 
commons-beanutils-bean-collections.jar - only Bean Collections classes 

The main commons-beanutils.jar has an optional dependency on Commons Collections 
+1

La situazione è cambiata con beanutils 1.9: commons-beanutils-core e commons-beanutils-bean-collections non vengono più rilasciati. Invece, le classi incriminate sono state rimosse da commons-beanutils.jar. Quindi assicurati che il tuo commons-beanutils sia aggiornato. – seanf

+1

Al contrario - commons-beanutils-bean-collections è il barattolo che stai cercando. Privo delle lezioni offensive – Vaiden

1

un'occhiata a questo articolo link è dice di usare escludere i tag

UPDATE

un'occhiata a questo per link2

<project> 
    ... 
    <build> 
    <plugins> 
     <plugin> 
     <groupId>org.apache.maven.plugins</groupId> 
     <artifactId>maven-shade-plugin</artifactId> 
     <version>2.0</version> 
     <executions> 
      <execution> 
      <phase>package</phase> 
      <goals> 
       <goal>shade</goal> 
      </goals> 
      <configuration> 
       <artifactSet> 
       <excludes> 
        <exclude>classworlds:classworlds</exclude> 
        <exclude>junit:junit</exclude> 
        <exclude>jmock:*</exclude> 
        <exclude>*:xml-apis</exclude> 
        <exclude>org.apache.maven:lib:tests</exclude> 
        <exclude>log4j:log4j:jar:</exclude> 
       </excludes> 
       </artifactSet> 
      </configuration> 
      </execution> 
     </executions> 
     </plugin> 
    </plugins> 
    </build> 
    ... 
</project> 
+0

Forse sai anche come escludere classi specifiche da un JAR? :) L'esclusione non aiuta poiché queste quattro classi non sono le uniche classi in questi JAR – yegor256

+0

Maven non consente l'esclusione di classi specifiche - solo specifiche dipendenze transitive che di solito sono interi jar. –

-2

Cancellare il pacchetto di raccolta dal beanutils JAR, ha funzionato per me :)