gpt4 book ai didi

java - 修补 Java 软件

转载 作者:搜寻专家 更新时间:2023-10-31 19:36:00 27 4
gpt4 key购买 nike

我正在尝试创建一个进程来修补我们当前的 Java 应用程序,以便用户只需要下载差异而不是整个应用程序。我认为我不需要像二进制 diff 那样低级别,因为大多数 jar 文件都很小,所以替换整个 jar 文件没什么大不了的(最多可能 5MB)。

是否有标准工具可以确定更改了哪些文件并为它们生成补丁?我见过像 xdelta 和 vpatch 这样的工具,但我认为它们在二进制级别上工作。

我基本上想弄清楚 - 需要添加、替换或删除哪些文件。当我运行补丁时,它会检查软件的当前版本(从注册表设置)并确保补丁的版本正确。如果是,它将进行必要的更改。听起来这对我自己来说并不难实现,但我想知道其他人是否已经这样做了。如果有任何不同,我将使用 NSIS 作为我的安装程序。

谢谢,

杰夫

最佳答案

这样做时要小心——我建议根本不要这样做。

最大的问题是公共(public)静态变量。它们实际上被编译到目标中,而不是被引用。这意味着即使 java 文件没有改变,类也必须重新编译,否则您仍然会引用旧值。

您还需要非常小心地更改方法签名——如果您更改方法签名并且不重新编译调用该方法的所有文件,您将会遇到一些非常微妙的错误——即使调用 java 文件没有重新编译实际上需要更改(例如,将参数从 int 更改为 long)。

如果您决定沿着这条路走下去,请准备好在客户站点上出现一些您无法复制和很多生气的顾客。

编辑(评论太长):

类文件的二进制差异可能有效,但我假设编译了某种版本号或日期,并且它们会在每次编译时无缘无故地改变一点,但可以很容易地测试。

您可以采取一些严格的开发实践,不使用 public final statics(将它们设为私有(private)),而不是每次更改方法签名(改为弃用),但我不相信我知道所有这些可能的问题,我只知道我们遇到的问题。

Jar 文件的二进制差异也是无用的,您必须区分类并将它们重新集成到 jar 中(听起来不容易跟踪)

您能否将您的资源单独打包,然后稍微减少您的代码?提取字符串(适用于 i18n)——我想我只是想知道您是否可以对类文件进行足够的修剪以始终进行完整的构建/发布。

另一方面,Sun 似乎在制作与以前的 JRE 版本完全兼容的类文件方面做得不错,因此他们必须在某处提供指南。

关于java - 修补 Java 软件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3738523/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com