1

我的 Java 项目依赖于第三方库,我们称之为 xyz.jar。我的项目在 git 和 svn 中的 xyz 中维护。xyz 作为 Maven 依赖项包含在我的项目中,因此它会作为构建过程的一部分自动下载。

我需要对 xyz 的源代码进行细微调整,但仍想从项目维护者那里获得更新。我有什么选择?

目前,最好的选择似乎是:

  1. 使用 .将 xyz 的 svn 存储库分叉到一个的git 存储库中git svn clone
  2. 破解 git repo。
  3. 从 git repo 构建 xyz-hacked.jar 并将工件导出到 maven 库服务器。

当 xyz 出现新的变化时,我可以做一个git svn rebase来保持我的 git repo 是最新的。

这里有哪些最佳实践?我可以改进这种方法吗?

编辑

我知道会涉及一些手动工作,例如解决合并冲突并确保我的补丁与最新的 xyz 兼容。我不是在寻找通用的自动代码合并解决方案。我试图找出在这种情况下最佳实践和工具是什么。

摇篮

我不认为这是一个特定于 Gradle 的问题,但以防万一有一个特定于 Gradle 的答案:我使用 Gradle 将 xyz.jar 作为“编译”依赖项包含在内。

4

2 回答 2

1

无论您使用哪种方法,它始终是劳动密集型的。

会发生明显的冲突,但更隐蔽的是,基础中任何地方的任何更改都可能完全破坏您的本地模块,即使是您本地模块不涉及的源文件中的更改(即您依赖的接口签名)。

每个 rebase 都需要对 3rd 方库以及依赖于该库的应用程序进行手动合并和完整的回归测试。

根据定义,这是不可自动化的。

于 2013-07-21T18:18:30.270 回答
0

我认为你应该在你的方法方面考虑以下几点:

  • 您不知道 exacltyy 项目维护人员将如何更改源代码。因此,虽然您将能够使用 rebase 应用大多数更新,但在某些时候您最终将面临必须手动解决的冲突。
  • 这个第 3 方库可能不会经常更改。即使是这样,也不意味着您必须立即更新您的依赖关系。做什么的?该库可能有很多更新,无论如何都不会影响您的代码。那么为什么要打扰它呢?

我的观点是,此类问题无论如何都不应该自动化,因为这种情况很少发生,并且无论如何都需要您的手动干预。即,您将花费更多的时间来尝试自动执行此操作,而不是手动重建,例如半年一次。

于 2013-07-21T18:15:51.987 回答