IntelliJ、JRebel、Maven 和一个 JEE 6 应用程序
IntelliJ, JRebel, Maven and a JEE 6 application
我的设置是
- IDE:IntelliJ
- 应用程序:带有 EAR 和 WAR 模块的 JEE6
- 构建:Maven
- 热代码替换:JRebel
- 应用服务器:Glassfish 3.1
我在 IntelliJ 中以部署耳朵的方式配置了应用程序。 ear "target" 文件夹看起来像这样
target/classes/
target/appEar/appWeb-version-Snapshot.war/
target/appEar/lib/
target/appEar/META-INF
在默认配置中,JRebel 侦听 类/ 文件夹中的更改。
当我更改 Web 模块中的某些内容并构建它时,类 仅在 appWeb/target/classes/ 中更新,但不在 appEar/target/appEar/appWeb-version-Snapshot.war/ 中更新。
如果我想更新那些 类 我必须在构建项目后在 IntelliJ 中 select "Build Artifacts"。
总而言之,我必须执行以下步骤来进行热代码替换:
- (once) 正确配置 JRebel。
- 制作项目
- 构建工件
整个过程对我来说似乎太复杂了。有谁知道如何正确设置 IntelliJ/Maven/Glassfish/JEE/JRebel 吗?我还没有找到包含我所有工具的示例。我只想执行一项代码替换操作,而不是两项。
为什么每次都需要Build Artifacts?
您的 war 应包含映射到 /target/classes
文件夹中的 类 的 rebel.xml。
当您对上述 类 进行更改时,您的服务器就会知道从那些 类 加载更改。
因此,假设您的 rebel.xml
类路径指向 /target/classes
。
,您只需构建项目即可查看更改
您的项目工件设置中有 "build on make" 复选框,如果您正在寻找它,它将始终在编译时重新创建您的工件。然而,JRebel 应该根据 rebel.xml 重新映射您的应用程序正在读取 class 文件和资源的位置,因此您可能应该重写 rebel.xml 以查找它们被编译到的 classes ,而不是他们在构建工件后最终到达的地方。
我的设置是
- IDE:IntelliJ
- 应用程序:带有 EAR 和 WAR 模块的 JEE6
- 构建:Maven
- 热代码替换:JRebel
- 应用服务器:Glassfish 3.1
我在 IntelliJ 中以部署耳朵的方式配置了应用程序。 ear "target" 文件夹看起来像这样 target/classes/ target/appEar/appWeb-version-Snapshot.war/ target/appEar/lib/ target/appEar/META-INF
在默认配置中,JRebel 侦听 类/ 文件夹中的更改。 当我更改 Web 模块中的某些内容并构建它时,类 仅在 appWeb/target/classes/ 中更新,但不在 appEar/target/appEar/appWeb-version-Snapshot.war/ 中更新。
如果我想更新那些 类 我必须在构建项目后在 IntelliJ 中 select "Build Artifacts"。
总而言之,我必须执行以下步骤来进行热代码替换:
- (once) 正确配置 JRebel。
- 制作项目
- 构建工件
整个过程对我来说似乎太复杂了。有谁知道如何正确设置 IntelliJ/Maven/Glassfish/JEE/JRebel 吗?我还没有找到包含我所有工具的示例。我只想执行一项代码替换操作,而不是两项。
为什么每次都需要Build Artifacts?
您的 war 应包含映射到 /target/classes
文件夹中的 类 的 rebel.xml。
当您对上述 类 进行更改时,您的服务器就会知道从那些 类 加载更改。
因此,假设您的 rebel.xml
类路径指向 /target/classes
。
您的项目工件设置中有 "build on make" 复选框,如果您正在寻找它,它将始终在编译时重新创建您的工件。然而,JRebel 应该根据 rebel.xml 重新映射您的应用程序正在读取 class 文件和资源的位置,因此您可能应该重写 rebel.xml 以查找它们被编译到的 classes ,而不是他们在构建工件后最终到达的地方。