重新部署JRebel替代品


190

JRebel允许重新部署新编译的代码,而无需重新启动应用程序。我想知道是否还有其他选择(免费?)。在 FAQ页面回答了这个问题,但我相信它是对JRebel的偏见。这个问题是一年前在此站点上提出的,但是我将其重新提出来看看是否有人有任何新信息。

附带一提,我真的很喜欢JRebel,但是如果有免费的替代选择,我愿意尝试一下。

另外要注意的是,我正在从事一个开源项目,他们向可以证明自己在开源项目中的人们免费提供一年的许可证。这对我来说很棒(www.kuali.org),但是我永远不会在那个项目上。


53
好问题。我们也一直在寻找JRebel的替代产品,因为他们的销售部门极具侵略性。我们为JRebel之类的产品付款时没有问题,但是当它们困扰我们的开发人员和IT部门24/7时,这没有问题。
neu242 2013年

4
jRebel可以通过自己的ZeroTurnAround替代jRebel:Jrebel的免费版本,用于开源项目和研究案例... my.jrebel.com
dellasavia 2015年

2
我知道答复很晚,您可以看一下Spring Loaded-,它是JVM代理,用于在JVM运行时重新加载类文件更改。它在加载时转换类,以使其适合以后重新加载。与“热代码替换”不同,后者仅允许在JVM运行后进行简单更改(例如,对方法主体进行更改),而Spring Loaded允许您添加/修改/删除方法/字段/构造函数等……
Simple-Solution

Eclipse调试器-立即替换您的实时代码。
user1050755'9

尝试将其发布在姊妹站点Software Recommendations Stack Exchange上
罗勒·布尔克

Answers:


97

看一下DCEVM,它是对HotSpot VM的修改,它允许在运行时进行无限的类重新定义。您可以在运行时添加/删除字段和方法并更改类的超级类型。DCEVM的功能可以作为JEP 159的一部分集成在Java的将来更新中。

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

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


5
它工作正常,我发现它比JRebel更快,内存消耗更少。唯一的限制是坚持使用Java 6u25。
伊曼纽尔·布尔格

3
非常感谢你。我整日都在努力使jRebel能够按需工作。DCEVM开始营救。
alehro 2012年

4
以下是在JDK 7u45和MacOSX上DCEVM的完整构建和安装说明:neu242.livejournal.com/52962.html
neu242 2013年

1
JEP 159不是JDK 8的一部分。它可能已推迟到JDK 9,但尚未确认。
KrishPrabakar 2013年

5
在此处找到了一些完整的JVM 1.7二进制文件:dcevm.nentjes.com,因此无需修补JVM。我尝试了win64,对我来说效果很好。如果您需要更多详细信息,我也在这里写过
dnang 2014年

42

Hotswap AgentDCEVM的扩展,它支持许多Java框架(重新加载Spring bean定义,Hibernate实体映射,记录器级别设置等)。

还有很多文档,说明如何为Java 1.7设置DCEVM和已编译的二进制文件。


5
他们现在有一个专用网站:hotswapagent.org。该项目是一个相当新的项目,但似乎运行得很好。
Didier L

在详细介绍它之后,我按照本教程将其集成到了eclipse中:tirthalpatel.blogspot.fr/2014/06/…它的工作原理就像是一种魅力
jpprade 2014年

@edudant安装“ Hotswap代理”后,是否需要安装DCEVM?因为我已经在Ubuntu 19.04中使用“ sudo apt install openjdk-11-jre-dcevm”以及IntelliJ Ultimate 2019.1.3中的插件安装了DCEVM。如果安装“ Hotswap代理”,更不用说JRebel的工作了,DCEVM的用途是什么!


20

由Spring家伙使用,用于Grails重载,但也适用于Java:

https://github.com/SpringSource/spring-loaded


3
我不想抱怨,但是弹簧加载不支持依赖项重新加载。
lbednaszynski 2013年

我记得,您可以设置一些系统属性来告诉它可以重新加载的软件包。它还有其他局限性,无论如何我都希望使用DCEVM。
拉蒙

1
“什么包可以重新加载”-正确。@lbednaszynski指出的问题是它不会重新加载相关的JAR。这对于Maven多模块项目至关重要。
MarcelStör2014年

这个项目目前在阁楼上!
jpmottin



4

您可能要看一下:

HotSwap支持:Java HotSpot VM的面向对象的体系结构启用了高级功能,例如,即时类重新定义或“ HotSwap”。此功能提供了通过调试器API替换正在运行的应用程序中的已修改代码的功能。HotSwap向Java平台调试器体系结构添加了功能,使类可以在执行期间在调试器的控制下进行更新。它还允许在插入了性能分析代码的方法版本中通过热交换来执行性能分析操作。

目前,这仅允许重新部署新编译的方法主体,而无需重新启动应用程序。您要做的就是使用调试器运行它。我在Eclipse中尝试过,并且效果出色。

此外,正如伊曼纽尔·布尔格(Emmanuel Bourg)在回答中提到的那样(JEP 159)中,希望能够支持超类型的添加以及方法和字段的添加和删除。

参考: Java白皮书135217:可靠性,可用性和可维护性


-3

JRebel是免费的。不要买。在“购买”页面上选择“免费”选项(单选按钮)。然后选择“社交”。注册后,您将获得功能齐全的JRebel许可证密钥。然后,您可以下载JRebel或使用IDE嵌入式版本中的密钥。渔获量(是的,有渔获量),您必须允许他们每月在FB时间轴或Twitter帐户上代表您发布(广告)一次。我给了他们我的Twitter帐户,没什么大不了的,我从没使用过,也没有人真正使用过它。因此节省$ 260。


14
还有一个收获。JRebel Social仅对于非商业用途免费。是的,可以肯定,我们不会检查您是在实际用于个人项目还是在工作中使用它,但是如果审计员看到您滥用该软件,则可能不喜欢它。
安东·阿希普夫

2
我永远不会建议。实际上-我提出这一点的唯一原因是因为不再有“个人”许可。我能够让我的公司支付我的工作许可证。然后,我还为个人使用支付了3年以上的个人许可证。但是当价格超过每年260美元时,这变得不切实际。对于我(和其他人)来说,这是最好的解决方案,但是如果价格合理,我也会一直为此付出代价。
迈克尔·安德鲁斯

42
而且,每年我都需要回购已经购买的软件的事实令人沮丧。没有其他公司这样做。通常,您购买一次软件。如果您选择升级-那么您会以全价(或根据公司而定,可能是升级价格)再次购买。但是,您要付费的只是新功能-与您已经付费的功能不同。就像苹果或微软每年禁用您的计算机,直到您再次为操作系统付费。值得深思。
Michael Andrews

2
JRebel Social已被myJRebel取代。它免费用于非商业用途,您只需要允许共享统计信息即可:my.jrebel.com
史蒂夫·

1
总而言之,对于开发人员软件许可证,JRebel相对便宜。
Jared Hooper
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.