如何使用 Maven 在 EAR 中添加 WAR

Posted

技术标签:

【中文标题】如何使用 Maven 在 EAR 中添加 WAR【英文标题】:How to add WAR inside EAR with Maven 【发布时间】:2011-07-07 05:23:50 【问题描述】:

我有一个应用程序的 EAR,我需要用我自己的代码扩展这个应用程序,该代码打包为 WAR。是否有 maven 插件可以帮助我将 WAR 放入 EAR 中?

手动过程是将WAR放入EAR并将模块添加到application.xml。我想自动化它。

编辑:小说明 - WAR 项目使用 maven,但对于 EAR,我只有二进制文件。

【问题讨论】:

【参考方案1】:

我将创建一个具有<packaging>ear</packaging> 的新模块。

在此 ear 模块的依赖项中,包含您的 war 模块:

<dependency>
    <groupId>com.your.group.id</groupId>
    <artifactId>your-war-artifact</artifactId>
    <version>your-war-version</version>
    <type>war</type>
</dependency>

现在在这个 ear 模块的构建插件中,包含 maven-ear-plugin 之类的,例如:

<plugin>
    <artifactId>maven-ear-plugin</artifactId>
    <version>2.3.2</version>
    <configuration>
        <finalName>MyEarFile</finalName>
        <version>5</version>
        <generatedDescriptorLocation>$basedir/src/main/application/META-INF</generatedDescriptorLocation>
        <modules>
            <webModule>
                <groupId>com.your.group.id</groupId>
                <artifactId>your-war-artifact</artifactId>
                <uri>YouWarFile.war</uri>
                <bundleFileName>YouWarFile.war</bundleFileName>
                <contextRoot>/appname</contextRoot>
            </webModule>
        </modules>
    </configuration>
</plugin>

您可以根据需要更改webModule 的具体配置值。

现在创建一个父模块(使用&lt;packaging&gt;pom&lt;/packaging&gt;)并将war 模块和ear 模块添加到其中。确保你正确设置了war和ear模块的&lt;parent&gt;

当您为这个新父级运行mvn package 时,war 模块将构建一个war 文件,并且ear 模块将构建一个ear 文件(包含war)。

【讨论】:

我必须在 EAR pom.xml 中添加 WAR 作为依赖项吗?它如何知道我的 WAR 在 web 模块中的位置? 你试过了吗?是的,如上所述,您需要 ear 模块中的依赖项。 maven-ear-plugin 不需要 war 文件的确切位置/路径,因为它将其称为 maven 工件(使用 webModule 元素中指定的 groupId 和 artifactId)。 @joelittlejohn 为什么我需要两次声明工件your-war-artifact?一次在依赖部分,又一次在webModule 部分?你能解释一下吗? @Geek war 文件是一个依赖,如果它不存在就会被构建,maven 将使用war pom 文件配置来构建war 工件。 webModule 引用是为了将战争工件包含在 ear 文件中。【参考方案2】:

添加 WAR 作为依赖项并使用maven ear plugin。然后使用ear:generate-application-xml 目标,最后使用ear:ear 目标。

【讨论】:

也许我遗漏了一些东西,但我不知道如何使用 maven ear 插件。问题是我没有那个 EAR 的来源。 如果你有EAR文件可以解压:maven.apache.org/plugins/maven-ear-plugin/examples/…然后添加war,修改application.xml再打包。

以上是关于如何使用 Maven 在 EAR 中添加 WAR的主要内容,如果未能解决你的问题,请参考以下文章

如何在 maven-war-plugin 中正确设置清单类路径

maven 之坐标及仓库

Hudson + SVN + Maven 持续集成实现自动化编译打包部署(over SSH 和 Deploy war/ear to a container 两种部署方式)

更新线上运行中 WAR, EAR 包里的个别文件

如何在GlassFish上部署基于JDO的EAR文件?

JBoss 中的基本 ear-package 部署