重新部署JRebel的替代方案

195
JRebel允许重新编译的代码在不重启应用程序的情况下进行重新部署。我想知道是否有任何替代方案(免费的?)。FAQ页面回答了这个问题,但我相信它对JRebel持有偏见。一年前在这个网站上问过这个问题,但我现在再次提出来看看是否有新的信息。
另外,我真的很喜欢JRebel,但如果有免费的替代方案,我愿意尝试一下。
还有一个注意事项,我正在开源项目上工作,他们向能够证明自己参与开源项目的人提供免费的一年许可证。这对我来说非常好(www.kuali.org),但我不会永远参与这个项目。

56
好问题。我们也一直在寻找JRebel的替代品,因为他们的销售部门非常具有侵入性。我们没有问题支付像JRebel这样的产品,但当他们24/7缠着我们的开发人员和IT部门时就不行了。 - neu242
4
ZeroTurnAround公司提供jRebel的替代选择:免费版本的Jrebel适用于开源项目和案例研究。网址为https://my.jrebel.com/。 - deldev
2
我知道回复晚了,你可以看一下 Spring Loaded - 它是一个JVM代理程序,可以在JVM运行时重新加载类文件更改。它会在加载时转换类,以使它们适于稍后重新加载。与“热代码替换”不同,后者只允许在JVM运行时进行简单的更改(例如,更改方法体),Spring Loaded允许您添加/修改/删除方法/字段/构造函数和更多... - Simple-Solution
Eclipse调试器 - 即时替换您的实时代码。 - user1050755
尝试在姐妹网站软件推荐Stack Exchange上发布此内容。 - Basil Bourque
8个回答

101

看看DCEVM,它是HotSpot VM的修改版,允许在运行时无限制地重新定义类。您可以添加/删除字段和方法,并更改类的超类型。

原始站点提供的二进制文件仅限于Java 6u25和早期版本的Java 7。该项目已在Github上被分支,支持最新的Java 7和8版本。维护者为Windows / Linux的32/64位VM提供二进制文件。从Java 11开始,该项目移到了一个新的GitHub存储库,现在还提供OS X的二进制文件。

DCEVM为Debian和Ubuntu打包,与OpenJDK方便集成,并可使用java -dcevm调用。软件包的名称取决于默认JDK的版本:


5
它的表现很好,我发现它比JRebel更快,占用的内存也更少。唯一的限制是必须坚持使用Java 6u25。 - Emmanuel Bourg
3
非常感谢。我尝试让jRebel按预期工作整整一天,但失败了。幸运的是,DCEVM拯救了我。 - alehro
4
以下是DCEVM在JDK 7u45和MacOSX上的完整构建和安装指令:http://neu242.livejournal.com/52962.html - neu242
1
JEP 159 不是 JDK 8 的一部分。它可能会被推迟到 JDK 9,但目前还没有确认。 - KrishPrabakar
5
在这里找到了一些完整的JVM 1.7二进制文件:http://dcevm.nentjes.com/,因此无需修补您的JVM。我尝试了win64版本,对我来说效果很好。如果需要更多细节,请参阅我在此处的博客文章:http://javainformed.blogspot.com/2014/01/jrebel-free-alternative.html。 - dnang
显示剩余7条评论

42

Hotswap Agent是DCEVM的扩展,支持许多Java框架(重新加载Spring Bean定义、Hibernate实体映射、日志记录器级别设置等)。

此外,还有很多关于如何设置DCEVM和针对Java 1.7编译的二进制文件的文档。


5
现在他们有了一个专门的网站:http://www.hotswapagent.org。这个项目非常新,但似乎运行得相当不错。 - Didier L
我按照这个教程在Eclipse中安装并集成了它:http://tirthalpatel.blogspot.fr/2014/06/steps-to-setup-hotswap-agent-in-eclipse.html,现在它可以完美地工作。 - jpprade
@edudant 在安装“Hotswap agent”之后,我们需要安装DCEVM吗?因为我已经在Ubuntu 19.04上使用“sudo apt install openjdk-11-jre-dcevm”安装了DCEVM,并且还在IntelliJ Ultimate 2019.1.3中安装了插件。如果安装“Hotswap agent”就可以完成JRebel的工作,那么DCEVM有什么用处呢? - user10995419
DCEVM现在可以直接进行热交换,无需安装Hotswap Agent。 - rustyx
警告:Hotswapagent本身不会增强JVM中的类重载。它只是监视类路径,如果您在其中进行修改,则重新加载。但它遵守给定JDK的限制。 - judovana

21

20

3
我不想抱怨,但是 spring-loaded 不支持依赖性重载。 - lbednaszynski
据我回忆,有一些系统属性可以设置告诉它要重新加载哪些包。它还有其他限制,无论如何,我可能更愿意选择DCEVM。 - Ramon
1
“哪些包可以使得重载可行” - 正确。正如 @lbednaszynski 指出的问题,它无法重新加载依赖的 JAR 包。这对于 Maven 多模块项目至关重要。 - Marcel Stör
这个项目现在被搁置了! - jpmottin

12

9

我一直在开源项目上工作,它允许你热更替类,超过了hot swap的功能:https://github.com/fakereplace/fakereplace

这个项目可能适合你,也可能不适合,但是非常欢迎收到任何反馈。


4
你可能想看一下这个:
热插拔支持:Java HotSpot VM的面向对象架构使得高级功能成为可能,例如即时类重定义或“HotSwap”。此功能提供了通过调试器API在运行应用程序中替换修改后的代码的能力。HotSwap增加了Java平台调试器架构的功能,使得在调试器控制下可以更新类。它还允许通过热插拔插入了分析代码版本的方法来执行分析操作。
目前,这只允许重新部署新编译的方法体而无需重新启动应用程序。你只需要用调试器运行它。 我在Eclipse中尝试过它,效果很好。
此外,正如Emmanuel Bourg在他的答案( JEP 159)中提到的那样,有希望支持添加超类型和添加和删除方法和字段。
参考: Java白皮书135217:可靠性、可用性和可维护性

-4
JRebel是免费的。不要购买它。在“购买”页面上选择“免费”选项(单选按钮)。然后选择“社交”。注册后,您将获得完全功能的JRebel许可证密钥。然后,您可以下载JRebel或在IDE嵌入版本中使用该密钥。但是,有一个限制,即您必须允许他们每月在您的FB时间轴或Twitter帐户上发布广告。我把我的Twitter账户给了他们,没什么大不了的,我从来不用它,也没有人我认识真正使用它。所以可以省下260美元。

14
还有一个限制。JRebel Social仅供非商业用途免费。是的,当然了,我们不会检查您是否真的在个人项目或工作中使用它,但如果审计员看到您误用软件可能会不喜欢。 - Anton Arhipov
2
我绝对不会有其他建议。事实上,我提出这个问题的唯一原因是因为现在已经没有"个人"许可证了。我成功说服了公司支付我的工作许可证费用。之后,我也支付了个人许可证的费用,以供个人使用,持续了三年多时间。但当价格超过每年260美元后,这变得不实际了。对我(和其他人)来说,这是最佳解决方案,但如果价格合理,我也愿意继续支付。 - Michael Andrews
44
每年需要重新购买已经购买过的软件,这一事实令人沮丧。其他公司不会这样做,通常你只需要购买一次软件。如果你选择升级,那么你需要再次以全价(或根据公司而定可能是升级价格)购买。但你支付的是新功能的费用,而不是已经付过钱的同样功能。这就好比苹果或微软每年禁用你的电脑直到你再次购买操作系统一样。引起思考的问题。 - Michael Andrews
2
JRebel Social已被myJRebel取代。对于非商业用途,它是免费的,您只需要允许共享统计信息:https://my.jrebel.com - Steve Swinsburg
1
截至2018年7月5日,myJRebel已不再提供。现在单一开发者许可证的价格为每年550美元。 - Lucky
显示剩余2条评论

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接