我们有大量的战争中的溶液。战争是他们都使用Hibernate和Spring的感觉类似。这意味着,我们有一批各战争中同罐子。这已成为一个问题,因为耳朵的大小开始增长不成比例。

我想使用Maven计算依赖关系,并通用于多个战争所有罐子放置到EAR的根。

我试着组织使用J2EE原型(Maven的原型 - J2EE的简单)我的项目,但所有的战争仍然与WEB-INF / lib目录里面的依赖包装。 有没有办法让Maven计算用到的依赖,并将它们放置到EAR,只是因为他是能够计算所有过渡依赖构建战争或罐子时?

有帮助吗?

解决方案

创建一个新的伪像名为公地罐和打包为POM。这应该取决于你使用的是常见的罐子 - spring,hibernate的是,log4j等

然后,在每一个上的战争添加它与范围依赖“提供”(不要忘记设置类型POM)。你将能够看到它在你的类路径,但他们不会被打包成战争。这种方式,您也可以打包到战争特定的依赖关系,从的瘦战争不提供。

其他提示

正如你在留言中提到,它的Maven的任务来计算每个依赖。当你创建一个神器,每公共依赖,那么你也有猜测,这依赖属于那里。

这也是可能的,你必须部署一战,与它的另一台机器上的依赖关系没有耳朵,一个当您设定每一场战争的依赖来提供,那么你再坚持。

的唯一正确的方式,以获得瘦战争是从实施例: http://maven.apache.org/plugins/maven -war-插件/示例/瘦-wars.html

不过,现在到了有趣的部分,有一个很大的!快捷方式(其完全地带走提到疼痛),告诉行家,其依赖关系的战争也

Go的EAR-模块内部的声明与类型POM每WAR依赖性WAR第二依赖

<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/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<parent>
    <groupId>com.foo</groupId>
    <artifactId>skinny</artifactId>
    <version>0.0.1-SNAPSHOT</version>
</parent>
<artifactId>ear</artifactId>
<packaging>ear</packaging>
<dependencies>
    <dependency>
        <groupId>com.foo</groupId>
        <artifactId>war</artifactId>
        <version>0.0.1-SNAPSHOT</version>
        <type>war</type>
    </dependency>
    <dependency>
        <groupId>com.foo</groupId>
        <artifactId>war</artifactId>
        <version>0.0.1-SNAPSHOT</version>
        <type>pom</type>
    </dependency>
</dependencies>
<build>
    <plugins>
        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-ear-plugin</artifactId>
            <version>2.8</version>
            <configuration>
                <skinnyWars>true</skinnyWars>
                <defaultLibBundleDir>lib</defaultLibBundleDir>
                <modules>
                    <webModule>
                        <groupId>com.foo</groupId>
                        <artifactId>war</artifactId>
                    </webModule>
                </modules>
            </configuration>
        </plugin>
    </plugins>
</build>

现在,每场战争将独立与它自己的依赖包装和EAR将与骨感的WAR打包和lib文件夹内的每个依赖

<强>更新

请记住,耳朵/ lib文件夹不能被用于在一个严格的容器如JBoss EAP每个依赖罐子6.像战斧,primefaces等JSF组件库必须驻留在WEB-INF / lib中文件夹中。

一个方便的方法与上面描述的解决方案实现这一目标是使排除用于在耳的pom.xml这样的组件库:

...
<dependencies>
    <dependency>
        <groupId>com.foo</groupId>
        <artifactId>war</artifactId>
        <version>0.0.1-SNAPSHOT</version>
        <type>war</type>
    </dependency>
    <dependency>
        <groupId>com.foo</groupId>
        <artifactId>war</artifactId>
        <version>0.0.1-SNAPSHOT</version>
        <type>pom</type>
        <exclusions>
            <exclusion>
                <groupId>org.primefaces</groupId>
                <artifactId>primefaces</artifactId>
            <exclusion>
        </exclusions>
    </dependency>
</dependencies>
...

现在WAR的每一个依赖性将被放置在耳/ lib中除了将要放置在WEB-INF / lib中WAR

的内部组件库

可以设置依赖关系以范围“提供”。这意味着它们将通过一些其它模块提供,并且将不被包括在最终的罐或战争。

也许包装起来的时候最终的组装插件可以帮助你EAR和地点共同罐子那里。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top