【发布时间】:2013-11-19 20:04:12
【问题描述】:
我在我正在使用的一个更大的应用程序框架中发现了一个小错误。修复只需要更改单个类中的两行。我修复了问题并将更改推送到项目的存储库。
但是,我需要明天发布。因此,我不能等到图书馆发布新版本。我想知道将补丁版本集成到我的项目中的最佳方法是什么:
构建项目:我觉得这很困难,我什至无法正确构建它,因为快照存储库中有太多单元测试被破坏,即使没有单元测试,我也没有走得太远,因为我显然错过了一些在 Maven Central 中找不到的依赖项。另外,我需要将固定版本发送给所有其他开发人员,因为在 Maven Central 上找不到它。 (我们在网络上工作,我们没有自己的 Nexus。)
在我的项目中添加一个新模块,我在其中保留了已修复的类的副本。然后,我将此模块作为依赖项添加到所有应该使用该类的覆盖版本的模块。但是 JVM 是如何确定它实际加载的类的呢?它将找到两个包含同名类的 jar 文件。它将实际加载哪一个?如果我可以完成这项工作,这将允许我将修改后的类版本与我的项目集成,这样我就可以将补丁与项目一起分发,一旦错误得到修复,我就可以简单地删除模块。
我将修改后的类文件包含到受影响的模块本身中。到目前为止,这对我来说似乎是最简单的解决方案,因为 JVM 总是首先从同一个 jar 加载类。 (我说的对吗?至少这是我在测试中观察到的。)
感谢您对此的任何意见。
【问题讨论】:
-
您提到您无法构建最新的快照。您是否尝试过构建最新的稳定版本,可能来自分支/标签?
-
不,这实际上是一个更好的选择。但是这个解决方案的其他问题仍然存在。