maven open-liberty插件可以热重载单个类文件而无需停止和重新启动整个应用程序吗?

l7wslrjt  于 12个月前  发布在  Maven
关注(0)|答案(1)|浏览(128)

https://github.com/eugenp/tutorials/tree/master/microservices-modules/open-liberty
我使用上面的代码来测试maven open-liberty插件。

mvn liberty:dev

字符串
可以启动应用程序,这里没有问题。
然后,当一个jave文件被编辑,它得到检测和重新编译,也很好。
但是,整个应用程序会停止并重新启动。
可以将open-liberty配置为只热重载一个类文件而不重新启动整个应用程序吗?

ccrfmcuu

ccrfmcuu1#

如果不重启应用,则无法更新应用类,但可以使用调试器HCR

您无法在不重启应用程序的情况下更新“磁盘上”的应用程序的原因不是因为Liberty Maven/Gradle插件,而是因为Liberty运行时本身。应用程序类加载器不允许将单个类的新版本交换到已启动的应用程序中。
(虽然你可以更新静态内容,如.html文件,而无需更新应用程序)。

使用HCR避免应用重启

在许多情况下,您可以利用调试器HCR来替换“较低级别”的类实现。
这是有限制的,只有所有可能的更改的一个子集可以通过这种方式成功替换,例如,如here所述,您通常可以执行诸如替换方法体之类的操作,而通常不执行诸如更改方法签名之类的操作。

使用IDE工具

虽然您当然可以在没有Liberty特定IDE工具的情况下使用Java调试器,但为了完整起见,让我向您介绍我们针对三种流行编辑器的“Liberty Tools”IDE工具:

还有一个较旧的Eclipse功能,"Liberty Developer Tools"。对于较新的Maven/Gradle应用程序,我们通常推荐上面提到的较新的“Liberty Tools for Eclipse”功能,支持Jakarta EE 9/10和MicroProfile开发。也就是说,Liberty Developer Tools的应用程序更新支持在此时更好,(如下所述)。

关闭应用监控更新

如果您使用的是某种快速迭代开发环境,比如Liberty "dev mode",那么使用默认的Liberty配置,应用程序将在每次类更新时更新。根据应用程序的不同,应用程序更新可能需要大量的时间,这可能正是导致您首先提出这个问题的原因。
您可以通过在server.xml中配置<applicationMonitor>元素来禁用此行为:

<applicationMonitor updateTrigger="mbean" ... />

字符串
或者,您可以使用“disabled”代替“mbean”作为属性值。
解释说明
目前,在Liberty Tools中没有专门的应用程序更新帮助,因此“mbean”和“disabled”之间没有区别。在旧版的“Liberty Developer Tools”中,我们在这方面有一些“更智能”的功能,因此“mbean”将是一个更好的选择。

相关问题