Maven:从EAR中删除重复的罐子

时间:2012-11-13 14:41:44

标签: maven war ear

我们正在使用maven构建一个包含WAR的EAR,JARS在EAR的根目录和WAR的lib文件夹中都是重复的,我读到了关于从WAR中删除jar的瘦小的jar,但是我不希望这样我想把WAR作为独立的单位,
有没有办法以相反的方式执行它并从EAR的根文件夹中删除JAR? 附件是EAR POM

    <build>
    <plugins>
        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-ear-plugin</artifactId>
            <version>2.6</version>
            <configuration>
                <modules>
                    <webModule>
                        <groupId>com.csv.xyz</groupId>
                        <artifactId>web</artifactId>
                    </webModule>
                </modules>
            </configuration>
        </plugin>
    </plugins>
</build>
<dependencies>
    <dependency>
        <groupId>com.csv.xyz</groupId>
        <artifactId>web</artifactId>
        <version>0.0.1-SNAPSHOT</version>
        <type>war</type>
        <scope>compile</scope>
    </dependency>
</dependencies>

3 个答案:

答案 0 :(得分:2)

“maven-skinny-war”解决方案在你的情况下没有任何缺点。另请看这个问题和我的答案:How to make maven place all jars common to wars inside the same EAR to EAR root?

通过这个解决方案,您将首先获得与自己的依赖关系打包的WAR,然后使用瘦的WAR打包EAR模块。所以一切都可以自行部署,没有任何重复。

答案 1 :(得分:1)

由于类加载器架构,我认为这不是一个好主意。如果JAR是WAR的一部分,它由Web应用程序类加载器定义,这可能导致多个实例。如果它是EAR的一部分,它由企业应用程序类加载器定义,这是一个不同的类加载器。

答案 2 :(得分:0)

要从EAR lib文件夹中删除依赖项,请声明EAR pom中提供的依赖项,例如删除commons-lang:

<dependencies>  
    <dependency>
        <groupId>commons-lang</groupId>
        <artifactId>commons-lang</artifactId>
        <version>2.6</version>
        <scope>provided</scope>
    </dependency>    
</dependencies>

确保您拥有不需要依赖项的EJB模块!此外,webModules对EAR的根lib文件夹没有贡献,你有更多的依赖吗?