# Maven2 WAR Plugin doppelte Dependencies



## ueltschisa (13. Okt 2008)

Hallo Zusammen

Ich bin auf ein merkwürdiges Maven2 Problem gestossen.

Folgendes:

Ich habe ein Mavne WAR Projekt. In diesem Projekt habe ich einige Apache Commons und Struts dependencies definiert. Wenn ich das "package" Target ausführe habe ich in meinem WAR einige Commons Jar's dopelt, in verschiedenen Versionen.

So sieht mein POM aus:


```
<project xmlns="http://maven.apache.org/POM/4.0.0"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
    <modelVersion>4.0.0</modelVersion>
    <groupId>infplat</groupId>
    <artifactId>infplat-web</artifactId>
    <packaging>war</packaging>
    <version>1.0-SNAPSHOT</version>
    <name>infplat-web Maven Webapp</name>
    <url>http://maven.apache.org</url>
    <dependencies>

        <dependency>
            <groupId>log4j</groupId>
            <artifactId>log4j</artifactId>
            <version>1.2.8</version>
        </dependency>

        <dependency>
            <groupId>commons-logging</groupId>
            <artifactId>commons-logging</artifactId>
            <version>1.0.4</version>
        </dependency>

        <dependency>
            <groupId>commons-lang</groupId>
            <artifactId>commons-lang</artifactId>
            <version>2.0</version>
        </dependency>

        <dependency>
            <groupId>commons-validator</groupId>
            <artifactId>commons-validator</artifactId>
            <version>1.1.4</version>
        </dependency>

        <dependency>
            <groupId>pfstruts</groupId>
            <artifactId>pfstruts-core</artifactId>
            <version>1.1.1</version>
        </dependency>

        <dependency>
            <groupId>pfstruts</groupId>
            <artifactId>pfstruts-web</artifactId>
            <version>1.1.1</version>
        </dependency>
        
        <dependency>
            <groupId>aplat.ts</groupId>
            <artifactId>AplatUtil</artifactId>
            <version>2.11</version>
        </dependency>

        <dependency>
            <groupId>struts</groupId>
            <artifactId>struts</artifactId>
            <version>1.2.8</version>
        </dependency>

        <dependency>
            <groupId>taglibs</groupId>
            <artifactId>session</artifactId>
            <version>1.0.1</version>
        </dependency>

        <dependency>
            <groupId>quartz</groupId>
            <artifactId>quartz</artifactId>
            <version>1.5.2</version>
        </dependency>

        <dependency>
            <groupId>org.apache.avalon.framework</groupId>
            <artifactId>avalon-framework-impl</artifactId>
            <version>4.3.1</version>
        </dependency>

        <dependency>
            <groupId>fop</groupId>
            <artifactId>fop</artifactId>
            <version>0.20.5</version>
        </dependency>

        <dependency>
            <groupId>net.sourceforge.jexcelapi</groupId>
            <artifactId>jxl</artifactId>
            <version>2.6.3</version>
        </dependency>

        <dependency>
            <groupId>jenkov</groupId>
            <artifactId>jenkov-prizetags</artifactId>
            <version>3.4.0</version>
        </dependency>

        <dependency>
            <groupId>com.lowagie</groupId>
            <artifactId>itext</artifactId>
            <version>2.0.8</version>
        </dependency>


        

        <dependency>
            <groupId>infplat</groupId>
            <artifactId>infplat-server</artifactId>
            
            <version>1.0-SNAPSHOT</version>
            <type>ejb</type>
            <scope>provided</scope>
        </dependency>
        
        <dependency>
            <groupId>javax.servlet</groupId>
            <artifactId>servlet-api</artifactId>
            <version>2.5</version>
            <scope>provided</scope>
        </dependency>
        
        <dependency>
            <groupId>javax.servlet.jsp</groupId>
            <artifactId>jsp-api</artifactId>
            <version>2.1</version>
            <scope>provided</scope>
        </dependency>
        
        <dependency>
            <groupId>javax.ejb</groupId>
            <artifactId>ejb</artifactId>
            <version>2.0</version>
            <scope>provided</scope>
        </dependency>
        
        <dependency>
            <groupId>com.bea.wls</groupId>
            <artifactId>weblogic</artifactId>
            <version>10.3</version>
            <scope>provided</scope>
        </dependency>
       
    </dependencies>
    <build>
        <finalName>infplat-web</finalName>
        <plugins>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-compiler-plugin</artifactId>
                <configuration>
                    <source>1.6</source>
                    <target>1.6</target>
                </configuration>
            </plugin>
        </plugins>
    </build>
</project>
```

Um mal ein Beispiel zu nennen. In meinem Target WAR ist die Bibliothek commons-beanutils unter der Version 1.6.1 und 1.7 vorhanden.


Mit "mvn dependency:tree -Dverbose=true" bekam ich folgenden output:




> [INFO] [dependency:tree]
> [INFO] infplat:infplat-web:war:1.0-SNAPSHOT
> [INFO] +- log4j:log4j:jar:1.2.8:compile
> [INFO] +- commons-logging:commons-logging:jar:1.0.4:compile
> ...



Die Version 1.7 von commons-beanutils wird eigentlich korrekt ausgelassen, da die Version 1.6.1 höher im Tree definiert ist. Das sieht man auch wenn ich "mvn dependency:list" ausgebe.



> [INFO] [dependency:list]
> [INFO]
> [INFO] The following files have been resolved:
> [INFO]    antlr:antlr:jar:2.7.2:compile
> ...




Eigentlich kann Maven die Dependency konfilikte korrekt auflösen. Nur das WAR Plugin kopiert mir jedoch alle verfügbaren JAr's in das /WEB-INF/lib Verzeichnis.

Gibt es eine Möglichkeit dieses Problem zu beheben oder muss ich auf exlusions bei den Dependencies zurückgreiffen?

mfg

ueltschisa


----------



## maki (13. Okt 2008)

>> Gibt es eine Möglichkeit dieses Problem zu beheben oder muss ich auf exlusions bei den Dependencies zurückgreiffen? 

Die Exclusions sind DIE Lösung des Problems.

Die Übeltäter findest du auch einfach in der generierten Projektseite unter Project Information -> Dependencies -> Project Dependency Graph -> Dependency Tree oder aber unter Project Information -> Dependency Convergence, letzteres zeigt dir Konflikte direkt an.


----------



## ueltschisa (13. Okt 2008)

maki hat gesagt.:
			
		

> >> Gibt es eine Möglichkeit dieses Problem zu beheben oder muss ich auf exlusions bei den Dependencies zurückgreiffen?
> 
> Die Exclusions sind DIE Lösung des Problems.
> 
> Die Übeltäter findest du auch einfach in der generierten Projektseite unter Project Information -> Dependencies -> Project Dependency Graph -> Dependency Tree oder aber unter Project Information -> Dependency Convergence, letzteres zeigt dir Konflikte direkt an.



Hallo

Was ich nicht verstehe ist, wieso ich mit dependency:list eine korrekte Liste der Dependencies erhalte, im WEB-INF/lib allerdings falsche JAR's sind. Sollte das WAR-Plugin nicht die Dependencies verwenden, welche beim Kompilieren verwendet wurden?

grz


----------



## maki (13. Okt 2008)

Sorry, hab dich vorher missverstanden.

Handelt es sich um dieses Problem: http://jira.codehaus.org/browse/MWAR-33
?


----------



## ueltschisa (13. Okt 2008)

maki hat gesagt.:
			
		

> Sorry, hab dich vorher missverstanden.
> 
> Handelt es sich um dieses Problem: http://jira.codehaus.org/browse/MWAR-33
> ?



Hallo

Danke für deine Antwort.

Das beschriebene Problem ist meinem sehr ähnlich. Ich habe jedoch kein WAR Artefakt als Dependency sondern ein EJB Artefakt. Eventuell hat es die selbe Uhrsache.

Werde mal den genannten Bug genauer googlen, eventuell finde ich eine Lösung

mfg
ueltschisa


----------

