【问题标题】:Updating an application(Java) [duplicate]更新应用程序(Java)[重复]
【发布时间】:2011-05-19 18:58:47
【问题描述】:

可能重复:
How can I write a Java application that can update itself at runtime?

大家好,我希望能够在我的应用程序上运行实时更新。所以当有更新时,它会通知用户,然后在允许时下载必要的文件,而不是再次下载整个应用程序。我只需要详细说明我需要做些什么来实现这一目标。

【问题讨论】:

  • 听起来你想使用Java web start。 download.oracle.com/javase/tutorial/deployment/webstart
  • 直播,如更新而无需重新启动应用程序?
  • 是在运行时...就像每个应用程序更新然后可能会重新启动或其他东西...
  • 在不了解您应用的具体情况的情况下,我们不知道如何回答这个问题。有数百种不同的方式来实现应用程序更新。 Google 有一篇关于他们为更新 chrome blog.chromium.org/2009/07/smaller-is-faster-and-safer-too.html 所做的有趣文章
  • “我只需要详细说明我需要做些什么来实现这一目标。” - 我喜欢你如何将“刚刚”这个词并列在要求提供大量信息的旁边。

标签: java


【解决方案1】:

我建议你看看JRebel。它可以在运行时对类执行更新。以下是功能列表(来自他们的主页):

  • 对方法主体的更改
  • 添加/删除方法
  • 添加/删除构造函数
  • 添加/删除字段
  • 添加/删除类
  • 添加/删除注释
  • 更改静态字段值
  • 添加/删除枚举值
  • 更改界面
  • 替换超类

【讨论】:

  • 使用 JRebel,它可以直接从源代码工作。好吧,如果应用程序在另一个系统上并且我进行了更改,会发生什么情况?它将如何更新?非常感谢
【解决方案2】:

考虑在 NetBeans 平台(基于 Swing 的 RCP)之上构建您的应用程序。 在许多有用的东西中,它带有一个更新中心/自动更新服务: http://bits.netbeans.org/dev/javadoc/org-netbeans-modules-autoupdate-services/overview-summary.html

【讨论】:

    【解决方案3】:

    这里有不同的部分需要考虑。我看到三个不同的问题。

    1. 您的应用程序需要分解成可以“插入式”替换的独立部分。虽然原则上您可以替换单个类,但实际上一个单独的类需要更改的机会很小,因此您需要一些更高粒度的模块。两种可能的方法是 Eclipse 中使用的 Java EE 模块(EAR、WAR)和 OSGi。在每种情况下,都有一组明确定义的加载和卸载模块的功能。虽然您可以使用 Java 的 Classloader 功能构建这样的东西,但工作量很大,而且重新发明 OSGi 或类似的东西似乎是一种耻辱。但这前提是您的应用程序是在模块化部件中精心设计的。改造这种模块化真的很感动。
    2. 您需要一个能够检测和获取新版本模块并进行部署的基础架构。正如我所建议的,在这些方面有一些开源功能 - 看看 Eclipse 如何管理其 OSGi 更新。
    3. 如何管理此类模块化应用程序的大型分布式资产,其中不同的实例需要通信。我认为这非常很棘手,我很想听听有关此问题的解决方案。

    【讨论】:

    • 我不确定我是否完全理解,但会一遍又一遍地阅读,并会问我是否有任何问题..谢谢
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多