热交换java中的jar文件

我有两个jar文件。 One.jar包含启动进程的主要方法,而其他两个.jar只包含类文件。

在One.jar中,我在其清单类路径中引用了two.jar。

One.jar包含使用Class.forName()动态加载类的机制

我想要终身只部署One.jar一次。 不会对它进行任何更改。

更改将仅在two.jar中发生

我想用更新的two.jar热交换two.jar。 我已经看过其他关于热交换的post,就像OSGi,ANT的热门交换,但没有任何帮助我。

经过一番研究发现JRebel做得更好但我真的不知道如何将它与这些jar子结合起来? 我坚持了将近2天。 只需要几步信息即可完成。 有人帮帮我…这对我来说非常重要…谢谢

嘿,我终于得到了解决方案。 我真的不知道我会想出这么简单的解决方案。 我接受了@ThorbjørnRavnAndersen的想法。 我所做的只是首先获取jar文件的时间戳,然后使用URLClassLoader加载jar。 如果jar文件的时间戳改变(即当我用更新的jar替换jar时),那么我将使用close()丢弃旧的URLClassLoader对象并再次使用URLClassLoader加载新的jar。 我每次都要检查的唯一事情是jar的时间戳是否改变。 希望这个答案能帮助其他人。 谢谢大家的支持。

由于我与JRebel (我是产品经理) 直接相关 ,我可能会给出一些配置指针。

要使用JRebel更新JAR中的类,请将专用的rebel.xml配置文件放入该two.jar中,该文件将指向已编译的two.jar类的目录。

one.jar ---> two.jar `- rebel.xml // points to two/project/classes 

这是带有示例的文档: http : //manuals.zeroturnaround.com/jrebel/standalone/config.html#configuring-jars

根据项目的设置方式,IDE插件将有助于自动执行此操作。

请注意,如果您打算在实时系统中执行此过程,则JRebel不是用于此类目的的工具。