我有两个jar文件。 One.jar包含启动进程的主要方法,另外两个.jar只包含类文件。
在One.jar中,我在其清单类路径中引用了两个.jar。
One.jar包含使用Class.forName()
动态加载类的机制我想要终身部署One.jar一次。不会对其进行任何更改。
只会在two.jar
中发生变化我想用更新的two.jar热交换two.jar。我已经看过其他关于热交换的帖子,就像OSGi,ANT的热门交换,但没有什么可以帮助我。
经过一番研究后发现JRebel确实做得更好但我真的不知道如何将它与这些罐子结合起来?我坚持了将近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不是用于此类目的的工具。