Per*_*ion 27
下载一个新版本,并使用与最后一个Jar相同的名称重命名它,然后初始化新的Jar,在JVM中创建Jar的无缝更新...甚至可以在运行时更新Jar吗?
JAR文件没有"运行",JVM正在运行.您的JAR文件只包含使JVM执行有用工作的类信息(也称为字节代码指令).在大多数情况下,JVM实际上不会对您的JAR文件进行系统锁定,因此您可以将该文件替换为您的内容.
真正的问题当然是,一旦JVM加载你的JAR,无论你多少次覆盖它,它都会愉快地携带你加载的内容并且再也不会从你的JAR文件中读取.这是默认的类加载器的行为,不能被改变-但正如其他人所指出的-你不必使用默认的类加载器.您可以实现自己的,类似于Web应用程序服务器使用的,以便从文件系统加载更新的JARS.但要注意的是 - 定义自己的类加载器被认为是'坏主意',除非你真的知道你在做什么.你可以在这里和这里阅读更多.
too*_*asr 24
这是我以前见过很多次的事情(也是我自己做过的).我列出了可能出现的问题/解决方案的一些要点.
总而言之,当您想要实现JAR重新加载时,可能会遇到许多问题.幸运的是,如何最大限度地降低风险.最安全的方法是做类似的事情以获得相同的效果.Cleanest是自定义类加载器和JAR文件版本控制.
一般来说,你不能这样做,因为据我所知,这种行为没有正式定义。
但是,您可以使用官方类路径之外的jar 文件创建一个类加载器,然后根据需要从中加载类。通过丢弃类加载器加载的所有类实例,您可以删除当前资源,然后在新的 jar 文件上实例化新的类加载器,然后加载新类并创建新对象。
这非常复杂,所以也许您可以将 jar 制作为 OSGi 模块并通过 OSGi 加载器调用您的程序?
归档时间: |
|
查看次数: |
17452 次 |
最近记录: |