【问题标题】:Eclipse Maven Weblogic hot code swapEclipse Maven Weblogic 热代码交换
【发布时间】:2013-11-05 17:49:42
【问题描述】:

我有一个关于在 Eclipse 中使用 maven 在 Weblogic 上运行 Java EE 应用程序的基本问题。

我使用 OEPE(Oracle Enterprise pack for Eclipse),它带有一些插件,例如 m2e 和 wtp。据我所知,这个插件读取 pom 文件并基于它们构建 jar、war 和 ear 文件。

我现在做的是这样的:

我选中自动构建选项并让这些插件创建我的 EAR 文件,然后右键单击 Eclipse 中的 weblogic 服务器实例并使用添加/删除选项将其添加到服务器,最后启动应用程序服务器。这样,当我在我的类中更改代码时,它们将被应用程序服务器选中并且热交换工作。

另一种构建 EAR 文件的方法是使用 m2e 插件:右键单击父 pom 文件并选择 maven install 然后启动应用程序服务器并使用 wls:deploy 来部署 EAR 文件。 (这次我没有从 Eclipse 中将 ear 文件添加到应用程序服务器,当我在 IDE 中右键单击我的 weblogic 实例时,eclipse 也不知道那个 EAR 文件)。

据我所知,我只能将那些使用 wtp 插件构建的工件添加到服务器,而不是使用 m2e 插件的 maven 命令构建的工件。 wtp 和所有这些插件(实际上只是运行 mvn -install 的 m2e 除外)的问题在于它们不能完美地工作。有时他们没有正确构建工件,有时 jar 文件已经过时并且它们没有得到更新。此外,当您在另一个 maven 项目中使用一个项目的 jar 文件时,他们会在您进行更改之前卡在 jar 文件中,而使用 m2e 时,它​​们会完美地构建。

现在真正的问题来了:

哪种方式是正确的热部署方式?

我错过了什么吗?使用 m2e 插件构建 ear 文件并使用 wls:deploy 进行部署是否足够?如果是这样,热插拔将如何自行发生,或者我应该每次都使用 wls:redeploy 吗?如果m2e足够了,那么我假设我应该放弃wtp插件(它不知道pom文件的所有插件,我有时应该在eclipse的生命周期管理xml文件中将它们标记为忽略)。

很抱歉这个问题太长了,但我希望我能把案子说清楚并得到一些帮助!

【问题讨论】:

    标签: eclipse maven deployment weblogic12c hotswap


    【解决方案1】:

    让我为您提供我的清单,以使我的 Web 应用程序在 Weblogic 上热部署。此清单假定一个实现 Servlet 2.5 的 weblogic 版本,并假定您的项目是一个配置为运行 JDK 1.6 的 maven-compiler-plugin 的 maven 项目。 换句话说,您的 weblogic 版本是 10.x.x,并且您的 POM 包含以下 sn-p:

    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-compiler-plugin</artifactId>
    <version>2.3.2</version>
    <configuration>
        <source>1.6</source>
        <target>1.6</target>
    </configuration>
    

    建立战争

    使用OEPE插件新建Weblogic Web模块Weblogic.xml文件:

    • 不要启用弹簧扩展
    • 在 FastSwap 中:不要启用类重定义
    • 注意价值

      <wls:context-root>myappcontextroot</wls:context-root> 
      

      后面会在热部署中用到

    从项目的 Eclipse 上下文菜单中执行 Maven 更新项目

    执行 Maven 全新安装

    对于热部署设置:

    • 在 Windows->preferences->Server->Runtime 中添加本地 weblogic 作为运行时服务器。请记住将其 Java 主页更改为 Sun JDK 而不是 JRocket 以用于开发模式。
    • 在Server中添加本地服务器->添加服务器
    • 项目上下文菜单->属性->项目分面->添加分面性质
    • 确保 Jave Facet 是 1.6 版
    • 检查动态 Web 应用程序版本 2.5 并使目标运行时成为在第一步中声明的运行时服务器 + 在进一步的配置中,为“上下文根”指定上面提到的值“myappcontextroot”,并为“内容目录”指定值“ src\main\webapp”。不要生成 web.xml,否则你的 web.xml 会被覆盖
    • 按“确定”将上述所有方面更改应用于您的项目
    • 再次打开项目上下文菜单->属性->部署程序集->添加java构建路径->Maven依赖
    • 最后,在服务器窗口中将配置好的应用程序添加到正在运行的服务器中

    请按字面意思执行这些步骤,真的很值得!

    【讨论】:

    • 嗨,Sam,感谢您的评论,很抱歉回复晚了。我几乎使用与您相同的设置。我有不同之处:我让 wtp 插件为我创建了多面项目。我不明白你的意思是什么:“在进一步的配置中,给“context root”值“myappcontextroot”并给“Content directory”值“src\main\webapp”。已经添加了 Maven 依赖项(我猜是 WTP)。如果我在运行时选项卡的项目方面正确理解您,我应该检查我创建的 weblogic 实例。 (其余的在我的下一个回复中......)
    • 我应该对所有方面都这样做吗?说 web 模块有:“Dynamic web module”、“Java”、“JavaScript” .... 其他 maven 模块也是如此(例如我的 DAO Maven 模块的 ejb、java ...)。如果是这样,为什么这很重要?您的配置可能还有另外两个变体:1-我根本没有在 weblogic-application.xml 中定义上下文根(这有多重要?我在 application.xml 中定义了它)2-我没有快速启用完全交换。(我应该这样做吗?)。另一个问题:我不知道如何告诉 eclipse 自动创建 application.xml(我现在必须自己做)
    • “进一步配置”仅存在于“动态网络模块”分面窗口中。尝试在 eclipse 中创建一个全新的 maven 项目并按照我的步骤操作。我的步骤中不需要 WTP,我也不知道。
    • 就部署而言,文件“weblogic.xml”完成了文件“application.xml”的工作。此外,Weblogic 热部署必须找到“weblogic.xml”文件才能正常运行。因此,您不会被不需要的文件/步骤所困扰。
    • 感谢您的回复。大多数配置都是相同的,至少我现在知道我走在了正确的道路上。(有了你的技巧,我可能会得到更好的结果)。尝试 WTP 是值得的,并且可以减少您自己做的大部分工作。
    猜你喜欢
    • 1970-01-01
    • 2011-02-27
    • 1970-01-01
    • 1970-01-01
    • 2013-02-15
    • 2014-02-28
    • 1970-01-01
    • 1970-01-01
    • 2014-09-16
    相关资源
    最近更新 更多