2010-09-29 14 views
0

J'ai slf4j 1.6.1 avec Log4j 1.2.16 inclus dans mes dérives maven. Il fonctionnait bien dans les projets précédents. Cependant, récemment, j'ai commencé un nouveau projet en réutilisant une partie de la base de code précédente, puis j'ai commencé à avoir des problèmes étranges.conflits entre slf4j-log4j13 et slf4j-log4j12

<dependency> 
    <groupId>log4j</groupId> 
    <artifactId>log4j</artifactId> 
    <version>1.2.16</version> 
</dependency> 
<dependency> 
    <groupId>org.slf4j</groupId> 
    <artifactId>slf4j-api</artifactId> 
    <version>1.6.1</version> 
</dependency> 
<dependency> 
    <groupId>org.slf4j</groupId> 
    <artifactId>slf4j-log4j12</artifactId> 
    <version>1.6.1</version> 
</dependency> 

<dependency> 
    <groupId>org.apache.solr</groupId> 
    <artifactId>solr-solrj</artifactId> 
    <version>1.4.1</version> 
</dependency> 

En fait ce qui est arrivé est que en quelque sorte slf4j-log4j13 est également inclus dans le fichier de la guerre, le plus souvent à travers des relations de dépendance transitive de certaines autres dépendances. Cependant, quand j'ai utilisé "mvn dependency: tree" pour vérifier les dépendances transitives, je n'ai pas trouvé "slf4j-log4j13".

Le résultat est délicat. J'ai à la fois slf4j-log4j12 et slf4j-log4j13 dans mon fichier war. Étonnamment, cela a fonctionné très bien sur mon système Mac OSX, en quelque sorte. En travaillant bien, je veux dire qu'il n'y a pas de conflits, d'exceptions ou d'erreurs causées par cela. Cependant, lorsque je l'ai déployé sur une autre machine 64 bits Linux (Ubuntu), cela m'a causé des problèmes. L'exception est la suivante,

'xmlResponseParser' while setting bean property 'parser'; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'xmlResponseParser' defined in ServletContext resource [/WEB-INF/spring/spring-solr.xml]: Instantiation of bean failed; nested exception is java.lang.NoSuchMethodError: org.apache.log4j.Logger.log(Ljava/lang/String;Lorg/apache/log4j/Level;Ljava/lang/Object;Ljava/lang/Throwable;)V 
(Stack trace ignored) 

On dirait xmlResponseParser utilise slf4j mais n'a pas pu trouver la dépendance log4j. Est-ce causé par les conflits entre slf4j-log4j12 et slf4j-log413? Pourquoi cela arrive-t-il seulement sur Linux?

J'ai essayé d'enlever l'un d'eux; cependant, supprimer l'un d'eux pose des problèmes. J'aimerais voir si quelqu'un a eu des expériences similaires.

Répondre

0

problème résolu. slf4j-log4j13 est inclus statiquement dans webapp/WEB-INF/lib, pas directement géré par maven.