热交换java中的jar文件

时间:2014-01-03 21:38:47

标签: java jar hotswap

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

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

One.jar包含使用Class.forName()

动态加载类的机制

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

只会在two.jar

中发生变化

我想用更新的two.jar热交换two.jar。我已经看过其他关于热交换的帖子,就像OSGi,ANT的热门交换,但没有什么可以帮助我。

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

2 个答案:

答案 0 :(得分:4)

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

答案 1 :(得分:2)

作为我与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不是用于此类目的的工具。