【问题标题】:How to create an EAR file for an existing Maven Project如何为现有的 Maven 项目创建 EAR 文件
【发布时间】:2016-03-05 01:15:46
【问题描述】:

我已经开发了一个 Web 应用程序,到目前为止,我一直使用 Tomcat 作为 server 在本地进行测试。

我现在希望转到Oracle WebLogic Server 11gR1 (10.3.5) 以供进一步使用。我查了一下,发现支持.ear文件,比如.war文件。由于我使用的是Eclipse,所以我已经下载并安装了Weblogic Plugin,并成功添加了server

但是,如果我希望在 WebLogic 上部署 .ear 文件,我需要遵循哪些步骤?我现有的Maven Project 是否需要特定的文件结构?

我无法从eclipse 成功导出.ear file。我知道,一旦 .ear 文件准备就绪,我可以将其移动到我的 WebLogic C:\*BaseDirectry*\*BaseName*\applications 文件夹并从那里运行它。

但是如何成功地为我现有的maven 项目创建一个.ear 文件?

【问题讨论】:

    标签: java eclipse maven ear weblogic-10.x


    【解决方案1】:

    在这些情况下,我建议的结构是有一个 Maven 多模块项目,提供您的应用程序模块(jar 包装)、一个战争模块(战争包装)和一个耳朵模块(耳朵包装),以便清楚地分离关注并让 Maven 为每个模块构建一个工件。

    如果你的项目目前是一个经典的maven项目,你可以创建一个聚合器模块项目(pom打包)如下:

        <?xml version="1.0" encoding="UTF-8"?>
    <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>your.group.id</groupId>
        <artifactId>your.artifact.id-aggregator</artifactId>
        <packaging>pom</packaging>
        <version>your.version</version>
    
      <modules>
        <module>your.artifact.id-application</module>
        <module>your.artifact.id-war</module>
        <module>your.artifact.id-ear</module>
      </modules>
    </project>
    

    这意味着聚合器项目将指向存在于子文件夹 your.artifact.id-application、your.artifact.id-war 和 your.artifact.id-ear 中的 maven 模块。 应用程序模块是一个简单的 Maven 项目,提供您的应用程序逻辑并从中构建一个 jar 文件。它不是强制性的,但它也可以作为聚合器项目的父级(聚合和继承在 Maven 中是两个不同的东西,可以混合在一起或以不同的方式使用)。 您可以在模块中声明父项目,如下所示:

    <parent>
        <groupId>your.group.id</groupId>
        <artifactId>your.artifact.id-aggregator</artifactId>
        <version>your.version</version>
    </parent>
    

    在应用模块中,无需指定打包,默认为jar,而在ear和war模块中,打包分别为ear和war。

    war 模块需要将应用程序模块作为其依赖项。 WAR 模块也是放置集成测试的好地方。您还可以在此处配置 jetty maven 插件启动/停止作为前/后集成测试阶段的一部分。 war模块也会提供需要的src\main\webapp\WEB-INF结构

    ear 模块需要将 war 模块作为其依赖项,并且指定其类型 war 很重要,如下所示:

    <dependencies>
        <dependency>
            <groupId>your.group.id</groupId>
            <artifactId>your.application.id-war</artifactId>
            <version>your.version</version>
            <type>war</type>
        </dependency>
    </dependencies>
    

    注意战争。 ear 模块还将提供所需的 src\main\application\META-INF 结构。 ear模块可以简单的配置maven-ear-plugin如下:

    <build>
        <plugins>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-ear-plugin</artifactId>
                <configuration>
                    <modules>
                        <webModule>
                            <groupId>your.group.id</groupId>
                            <artifactId>your.artifact.id-war</artifactId>
                            <bundleFileName>your.artifact.id.war</bundleFileName>
                            <contextRoot>/your.artifact.id</contextRoot>
                        </webModule>
                    </modules>
                </configuration>
            </plugin>
        </plugins>
    </build>
    

    它的 application.xml 文件(在 src\main\application\META-INF 下)可以简单地如下所示:

    <?xml version="1.0" encoding="UTF-8"?>
    <!DOCTYPE application PUBLIC "-//Sun Microsystems, Inc.//DTD J2EE Application 1.3//EN" "http://java.sun.com/dtd/application_1_3.dtd">
    <application>
      <display-name>your.group.id.your.artifact.id_ear</display-name>
      <module>
        <web>
          <web-uri>your.artifact.id.war</web-uri>
          <context-root>/your.artifact.id</context-root>
        </web>
      </module>
    </application>
    

    它作为一个结构看起来可能过于复杂,但它可以让您控制模块和工件,满足 maven 最佳实践并提高您的关注度(即应用程序代码仅在应用程序模块上,集成测试仅在 war 模块上)。

    【讨论】:

    • 听起来可行。虽然有没有办法我可以简单地创建一个.ear?我确实看到了在eclipse 中导入.ear 项目的选项,但是,我无法理解为什么这不起作用。
    • 我实际上找到了两个相关的答案,它们提供了几乎相同的方法:stackoverflow.com/questions/1134894/…stackoverflow.com/questions/6829961/…,而这里javahonk.com/create-maven-ear-project-eclipse 有一个分步示例,我没有经历整篇文章,但他再次提供了实施相同方法的指南。
    • 您发布的链接 - javahonk.com/create-maven-ear-project-eclipse 是我能够理解的。所以,就在他说的开头 - Create parent module: JavaHonkParent Click File –&gt; New –&gt; Other –&gt; Maven –&gt; Maven Project then click Next - 第一步,他正在创建一个空的 maven 项目并构建一个 .war 文件和一个 .jar 文件,并进一步将它们添加到父 @987654338 @file - 听起来不错,看起来不错。完全有道理。但是,他创建了一个空项目,然后可能会在以后进行处理。我已经有一个项目。我该怎么办?
    • 他实际上描述了我在回答中解释的方法。空项目(打包 pom)是父/聚合器项目。在这个项目中,您需要声明 modules=other maven 项目(一个用于战争,一个用于耳朵,一个用于您的 implementation=jar)。您可以创建另一个 maven 项目作为父项目的子文件夹并将其链接为模块。在 Eclipse 中,您可以创建新的 Maven 模块(而不是项目),如果您在父文件夹上单击鼠标右键(链接 = 将其声明为父 POM 中的模块),它将自动链接到父模块。
    • 感谢您的回复!是的,我确实明白了这一点,并开始对我的项目做同样的事情。在我提出新问题的过程中,我收到了error。这是链接stackoverflow.com/questions/34019243/… 请看看,让我知道你的想法?
    猜你喜欢
    • 2018-11-09
    • 2017-03-30
    • 2018-04-13
    • 2014-02-06
    • 2018-04-25
    • 1970-01-01
    • 2023-03-04
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多