【问题标题】:IntelliJ, JRebel, Maven and a JEE 6 applicationIntelliJ、JRebel、Maven 和 JEE 6 应用程序
【发布时间】:2017-01-20 16:33:07
【问题描述】:

我的设置是

  • IDE:IntelliJ
  • 应用程序:带有 EAR 和 WAR 模块的 JEE6
  • 构建:Maven
  • 热代码替换:JRebel
  • 应用服务器:Glassfish 3.1

我以部署耳朵的方式在 IntelliJ 中配置了应用程序。耳朵“目标”文件夹看起来像这样 目标/类/ 目标/appEar/appWeb-version-Snapshot.war/ 目标/appEar/lib/ 目标/appEar/META-INF

在默认配置中,JRebel 监听 classes/ 文件夹中的更改。 当我更改 web 模块中的某些内容并构建它时,这些类仅在 appWeb/target/classes/ 中更新,而不在 appEar/target/appEar/appWeb-version-Snapshot.war/ 中更新。

如果我想更新这些类,我必须在构建项目后在 IntelliJ 中选择“构建工件”。

综上所述,热代码替换我必须做这些步骤:

  1. (一次)正确配置 JRebel。
  2. 制作项目
  3. 构建工件

整个过程对我来说似乎太复杂了。有谁知道如何正确设置 IntelliJ/Maven/Glassfish/JEE/JRebel?我还没有找到包含我所有工具的示例。我只想对代码替换进行一项操作,而不是两项。

【问题讨论】:

    标签: intellij-idea jrebel


    【解决方案1】:

    在您的项目工件设置中有“build on make”复选框,如果您正在寻找它,它将始终在编译时重新创建您的工件。但是 JRebel 应该根据 rebel.xml 重新映射您的应用程序正在读取类文件和资源的位置,因此您可能应该只重写 rebel.xml 以查找它们被编译到的类,而不是在构建工件后它们最终到达的位置。

    【讨论】:

      【解决方案2】:

      为什么每次都需要构建工件?

      您的战争应该包含映射到 /target/classes 文件夹中的类的 rebel.xml。

      当您对所述类进行更改时,您的服务器就会知道从这些类中加载更改。

      因此,假设您的 rebel.xml 类路径指向 /target/classes,您只需构建项目即可查看更改。

      【讨论】:

      • 我需要构建工件,让 IntelliJ 将爆炸战争的内容复制到 ear/target/。应用服务器从那里获取课程。
      • 如果您在构建项目后没有重新加载更改,那么 rebel.xml 配置可能有问题。您能否写信至 support@zeroturnaround.com 并将 jrebel 日志附加到您的邮件中。如何发送日志:manuals.zeroturnaround.com/jrebel/misc/sendinglogs.html
      • JRebel 工作正常。但我首先必须构建项目,然后是“构建工件”。所以我假设有一个更优雅的项目设置可以在 IntelliJ 中为 JEE 应用程序完成。此外,它仍然可以与 maven 一起使用。
      猜你喜欢
      • 1970-01-01
      • 2013-01-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-02-18
      • 1970-01-01
      相关资源
      最近更新 更多