我目前正在研究基于java的桌面软件。它是一个相当大的代码库(超过40个jar文件)。
我希望提供自动更新功能。桌面软件不断检查一个后端系统,以查看是否有新版本的jar文件可用。
现在的问题是:如何更换更新的jar文件?
答案 0 :(得分:3)
如果使用Java Webstart(JNLP)部署应用程序,几乎可以免费获得此机制......
来自http://mindprod.com/jgloss/javawebstart.html
Java Web Start的主要优势是自动更新,无需每次都下载整个程序。
答案 1 :(得分:1)
最简单的方法是检查每次启动时的更新,下载更新然后启动应用程序。我认为这是Java Web Start的工作方式(参见aioobes的回答)。
更复杂的是为您的应用程序使用netbeans或eclipse框架。两者都相当复杂,您必须重写您的应用程序才能使用它们。此解决方案支持实时更新。
据我所知,没有简单的方法来更新正在运行的应用程序。可以使用不同的类加载器加载类的新版本,但在仍然引用它们时无法卸载旧版本。
答案 2 :(得分:0)
您还可以序列化您的状态(将其保留在内存中),然后创建一个指向新.jar文件的新ClassLoader实例。然后使用这个新的类加载器再次序列化您的状态。您刚刚更改了执行产品中的underlaying .jars。
请注意,您不需要为实际使用.jar文件的部分更改所有内容的类加载器。这可能是棘手的结论是什么部分。如果做错了,你可能会得到令人讨厌的链接错误。所以..
..为了简单起见,使用WebStart或更新.jars的预加载器,然后启动主应用程序(基本上是WebStart为您做的)。
推销自己的原因是,您可以使用自己的格式进行.jars,加密,其他包装格式等。
答案 3 :(得分:0)
你可以制作一个小型服务器和一个下载最新版本的启动器,替换旧版本,并启动jar:
Runtime.getRuntime().exec("java yourjar -jar");
然后用:
终止启动器System.exit(1)