有时我需要修改第三方库以满足我的特定需求。它可以是错误修复、性能改进、添加功能等。
例如,我将 JSoup 和 Android 支持库源包含到我的项目中并进行了一些更改。我也对来自 Android 源代码的 2 个 Java 文件做了同样的事情。
我应该如何记录这个?
有时我需要修改第三方库以满足我的特定需求。它可以是错误修复、性能改进、添加功能等。
例如,我将 JSoup 和 Android 支持库源包含到我的项目中并进行了一些更改。我也对来自 Android 源代码的 2 个 Java 文件做了同样的事情。
我应该如何记录这个?
不。维护库的分叉版本很痛苦,尤其是当您想要升级库并需要一次又一次地向后移植您的更改时。更不用说有一天有人会忘记您的版本并使用标准版本。
因此,请始终尝试包含在没有您更改的情况下失败的测试用例(暴露代码中显示的外部库中的错误)。
始终将您的更改提交给原始作者/维护者。提交问题并包含您的补丁。如果您的更改值得违反规则 -1,它可能会包含在下一个版本中。
提交库的原始源文件而不做任何更改。然后使用描述性消息提交每一个改进/错误修复。最好包括问题/票证 ID,它将指向您(或图书馆)票务系统中的解释。
这样,在浏览此给定目录或项目的提交列表时,您可以轻松查看已更改的内容。如果提交消息不足以描述分叉和修改外部库的需要,您可以随时浏览问题/票证。同样在理想的世界中,这样的提交构成了理想的补丁(参见规则 0)。
奖励:我曾经有过通过maven插件自动分叉和修补外部库的想法。基本上,我们指示这个假设的插件在特定库上应用给定的补丁。Maven 可以轻松地下载源代码、重建、安装并自动包含修改后的版本,而不是目标工件中的原始版本。
无需维护分叉的二进制文件,只要补丁仍然干净地应用于新版本,升级就很容易。有人在这里有太多空闲时间吗?