JRebel允许在不重新启动应用程序的情况下重新部署新编译的代码。我想知道是否有其他选择(免费?常见问题页回答了这个问题,但我确信它偏向于JRebel.这个问题是一年前在这个网站上提出的,但我把它带回来,看看是否有人有任何新的信息。
顺便说一句,我真的很喜欢JRebel,但如果有免费的替代品,我愿意尝试一下。
另外需要注意的是,我正在做一个开源项目,他们提供免费的一年许可证给那些能够证明他们在做开源项目的人。这对我来说很好(www.kuali.org),但我不会永远在那个项目上。
看一下DCEVM,它是对HotSpot VM的修改,允许在运行时无限制地重新定义类。您可以在运行时添加/删除字段和方法,并更改类的超类型。
原始站点上可用的二进制文件仅限于Java 6u25和Java 7的早期版本。该项目已在GitHub上派生,并支持Java 7和8的最新版本。维护者为Windows/Linux上的32/64位虚拟机提供二进制文件。从Java11开始,该项目转移到了一个新的GitHub存储库,现在还为OSX提供了二进制文件。
DCEVM是为Debian和Ubuntu打包的,它可以方便地与OpenJDK集成,并且可以使用java -dcevm进行调用。包的名称取决于默认JDK的版本:
java -dcevm
我曾经写过一篇关于DCEVM:Spring-MVC+Velocity+DCEVM的文章。
我认为这是值得的,因为我的环境运行没有任何问题。
我一直致力于一个开源项目,它允许您在热交换允许的范围之外热替换类:https://github.com/fakereplace/fakereplace。
它可能对你有用,也可能没用,但任何反馈都是值得赞赏的
由Spring开发,用于Grails重新加载,但也可用于Java:
https://github.com/springsource/spring-loaded.
JRebel是免费的。不要买它。选择“购买”页面上的“免费”选项(单选按钮)。然后选择“社交”。注册后,您将获得一个功能齐全的JRebel许可证密钥。然后,您可以下载JRebel或在您的IDE嵌入式版本中使用该密钥。陷阱,(是的,有一个陷阱),你必须允许他们代表你每月在你的FB时间线或Twitter帐户上发布一次(广告)。我把我的推特账号给了他们,没什么大不了的,我从来没有用过,我认识的人中也没有人真正用过。所以节省260美元。
热插拔代理是对DCEVM的扩展,DCEVM支持许多Java框架(重新加载Spring Bean定义、Hibernate实体映射、记录器级别设置等)。
还有很多关于如何为Java1.7设置DCEVM和编译二进制文件的文档。
你可能想看看这个:
HotSwap支持:Java HotSpot VM的面向对象体系结构支持高级功能,如动态类重定义或“ HotSwap ”。此功能提供了通过调试器API替换正在运行的应用程序中修改的代码的能力。HotSwap将功能添加到Java平台调试器体系结构中,使类能够在执行过程中更新,在调试器的控制下。它还允许在插入了分析代码的方法版本中通过热交换执行分析操作。
目前,这只允许在不重新启动应用程序的情况下重新部署新编译的方法体。你所要做的就是用调试器运行它。 我在Eclipse中尝试了它,效果非常好。
此外,正如Emmanuel Bourg在他的回答(JEP 159)中提到的,有希望支持添加超类型以及添加和删除方法和字段。
参考文献: Java白皮书135217: 可靠性
DCEVM支持增强的类重定义,并且可用于当前的JDK7和JDK8。
https://github.com/dcevm/dcevm/releases.
HotSwapAgent是一个免费的JRebel替代方案,支持各种框架中的DCEVM.
http://hotswapagent.org/.