【问题标题】:Updating a Jar in production在生产中更新 Jar
【发布时间】:2013-08-16 18:53:07
【问题描述】:

我有一个用于客户端的 Swing/Java 应用程序,并且每周更新一次。 问题是设置只是布置了类及其各自的目录,而在更新时我只是更新了类。

我想做一个包含所有类的 jar,但我不确定如何更新它...

此外,有些客户需要在一周内进行一些更新,而这些课程只会更新一两个课程。

这样做的正确方法是什么?

我正在使用 Eclipse。 编辑:我知道如何创建 jar,只是不知道如何动态更新它。

【问题讨论】:

  • 我认为您应该指定您正在使用的 IDE,因为有多种方法可以为每个 IDE 生成 jar,这可能会非常节省时间。
  • 使用 Eclipse,您可以右键单击您的项目并导航到:Export > Runnable Jar > ...,然后填写所需的设置。
  • 我知道如何创建jar,只是不知道如何动态更新它。

标签: java eclipse jar production-environment


【解决方案1】:

执行此操作的一般方法是,即使只进行了很小的更改,也将在每次更新后重新打包您的 JAR 并将该 JAR 提供给用户。用户将替换现有的 JAR。 如何制作你的 JAR 取决于你自己。许多 IDE 都支持它,你可以编写一个 shell 脚本,使用现有的构建系统,如 ant 或 maven 甚至 make,等等。 (请参阅下面的编辑)

如果您的 JAR 非常大并且部署繁琐,您可以将项目拆分为更小的子组件,每个子组件都有自己的 JAR,并且只重新分发包含更改的子组件。这对您来说可能是也可能不是主要的重构,甚至可能不合适。对于大多数小型或中等规模的项目,这通常是不必要的。

至于部署,还有无数种方法可以让用户更轻松。你可以给他们一个 JAR 文件。你可以使用例如安装4j。您可以使用 Java Web Start(虽然它有点笨拙)。还有其他的。

install4j 和 JWS 都支持自动检查更新。如果您选择支持该功能,您需要做的就是更新您的分发站点,用户将自动收到更新。这也取决于你。

但对您的问题的简短回答是:如果您将所有类都打包在一个 JAR 中,那么无论有多少类更改,您都希望将整个更新后的 JAR 提供给用户。抵消这一成本的好处是,JAR 是应用程序/库源的一个很好的、压缩的、自包含的集合,这使得管理和部署非常方便。

编辑:响应您的编辑,您指定您正在使用 Eclipse,Josh M 在他对您的答案的评论中为您提供说明。要添加到他的评论中,要导出一个 Runnable Jar,您必须设置一个运行配置,如果您已经在 Eclipse 中运行您的应用程序,那么您可能已经有了。如果没有,您可以在“运行”菜单中创建一个。

编辑 2: 请参阅 Thorbjørn Ravn Andersen's answer 以及一些好的 JWS 提示。

【讨论】:

  • install4j 有办法将重新打包的 JAR(更新)提供给客户端并直接替换旧的吗?
  • 是的:请参阅resources.ej-technologies.com/install4j/help/doc/… JWS 可以说在这里更容易设置,但有行为不端的倾向。尽管如此,JWS 经常运行良好,如果您只想快速完成这个项目,这将是一个很好的直接解决方案。如果这对您来说还不够,您可以稍后随时更改为 install4j 之类的其他内容。
  • 不是直接的主题:如果您要开始认真对待更新和部署,我还建议使用版本控制系统,例如 Git 或 SVN。如果你这样做了,每次发布更新时标记修订是一种有效的维护策略,这样你就可以回到以前的发布更新来调查问题等。Git 和 SVN 都很好地集成到了 Eclipse 中。
  • 我使用的是SVN,我认为我不能使用JWS,因为更新附加了一个数据库,数据库上的程序也需要更新。我只是真的想把所有东西都打包起来,而不是像我现在正在做的那样将整个目录结构提供给客户端。
  • Install4j 是必须购买的商业产品。这对您来说可能重要也可能不重要。
【解决方案2】:

我建议您查看 Java WebStart,它旨在满足您的需求。

您需要首先创建完成的部署,然后您可以考虑为部署创建 JNLP 文件,以及将所有文件放到 Web 服务器以供用户访问的方法。现在只需让用户在每次更新时下载整个内容。当您变得更有经验时,您可以研究如何进行增量更新。

我强烈建议在部署路径中包含内部版本号或时间戳,这样 jar 文件就不会意外地错误地缓存在客户端中。

【讨论】:

  • 感谢您的帮助。
猜你喜欢
  • 1970-01-01
  • 2018-09-28
  • 1970-01-01
  • 2018-03-24
  • 1970-01-01
  • 2011-06-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多