【集思广益】遇到开源项目嵌套开源组件,双方版本不统一的情况

本贴最后更新于 1845 天前,其中的信息可能已经时移世异

主题提要

我 Fork 了一个人的仓库,我希望在此项目的基础上进行自己的修改。
但是,这个项目目前已经出到了 Tag12 版本了,但我根本不需要 Tag10 以后的更新内容。
这时候我就本地 checkout 一个 Tag10 的代码。


按照道理来说,这就一切都 ok 了。
我在 T10 版本上开发,就是我想要的结果,没问题。

可是这时候我发现,人家毕竟是多更新了两个大版本呢。
T12 里有一个小功能,我非常喜欢,我想搬下来。

没问题啊,直接 copy/paste 就好了,对吧?

我确实也这么做了。
但是发现,人家的 Maven dependencies 里,有一个是他们自己另外一个开源项目的组件。
这个小功能,偏偏受到了这个 dependence 的影响。

换句话说,我如果想要正常用这个小功能。
那我就得把 Maven 里的这个 dependence 版本给提高到小功能所在的 T12 版本一样高。

关键是:

一旦我将这个个别 dependence 的版本提高到和对方 T12 版本一样高,我 Fork 出来的整个项目可是建立在 T10 的基础上修改的。

这就意味着,那将带来数不尽的,由这个 dependence 受影响的类的全部修改。
并且每当别人修改一次 T12 版本的这个源码以及这个小功能的更新,我可能都需要去做一次这样的修改。


我不是说这样不可以

但只是想请问各位一下,对于这种情况,有没有更好的解决方式?
还是说我只能跟着对方的版本,每次都修改一下对方 dependence 的源码,然后自己去 Maven 中央仓库创建一个依赖,再把自己 Fork 的这个项目的依赖换成新创建的这个依赖?

换句话说

大家平时是怎么处理这种,自己 Fork 了一个项目,并且想更改别人依赖包的需求的?
毕竟别人觉得好用的开源依赖包,你也许也觉得好用,但同时也希望自己也可以修改一些依赖里的代码。

虽然我觉得如果实在不行
那就只能修改别人的依赖里对小功能实现的一小段代码,然后重新将别人的这个依赖打成自己的 Jar 引在项目里。
但也同时这种修改意味着,以后每次别人更新项目的时候,我都得重新打包来适应对自己项目的影响。
这让我一时半会想不到好的解决方法来处理。

希望各位看官能帮忙留一些自己的想法。
大家可以一起讨论一下。

  • 开源

    Open Source, Open Mind, Open Sight, Open Future!

    408 引用 • 3574 回帖
  • GitHub

    GitHub 于 2008 年上线,目前,除了 Git 代码仓库托管及基本的 Web 管理界面以外,还提供了订阅、讨论组、文本渲染、在线文件编辑器、协作图谱(报表)、代码片段分享(Gist)等功能。正因为这些功能所提供的便利,又经过长期的积累,GitHub 的用户活跃度很高,在开源世界里享有深远的声望,并形成了社交化编程文化(Social Coding)。

    209 引用 • 2031 回帖 • 1 关注
  • 仓库
    5 引用 • 9 回帖
  • 项目管理
    23 引用 • 51 回帖 • 1 关注

相关帖子

欢迎来到这里!

我们正在构建一个小众社区,大家在这里相互信任,以平等 • 自由 • 奔放的价值观进行分享交流。最终,希望大家能够找到与自己志同道合的伙伴,共同成长。

注册 关于
请输入回帖内容 ...
  • 感谢 D 佬 🙏

  • 其他回帖
  • SignV

    同意这个建议,可以考虑自己实现,功能嘛 你可以看看他这个小功能是怎么样的 自己实现一个 这样自己想扩展的时候又不用依靠他人 毕竟是自己实现的东西。当然认为没必要或者不需要的话 就可以不做 和 D 大说的一样 轻松很多 😂

    1 回复
  • 88250 1

    如果我没猜错的话这个依赖应该是个工具类库,因为只有工具类库才会被到处使用。可以 fork 一份维护,也可以直接依赖后稍作适配封装。

    如果这个依赖完成某种具体功能,可以重新考虑是否能自己实现或者到底是否需要,毕竟需求方面的事情可考虑的余地还是蛮大的,做了用户不一定需要,不做却能轻松很多 🤣

    2 回复
  • SignV

    额 我不是大佬 我是萌新 我是看到了这个问题说出了自己的想法而已 😂

  • 查看全部回帖
taoism-o
什么都喜欢一点。骑行 / 登山 / 旅游 / 看书 / 学习 /PS4/NS/XBOX/ 摄影 / 日语 / 英语 / 法语 /Java 开发工程师 / 想转算法 / 看好人工智能 / 金融 / 经济。。。 香港

推荐标签 标签

  • 房星科技

    房星网,我们不和没有钱的程序员谈理想,我们要让程序员又有理想又有钱。我们有雄厚的房地产行业线下资源,遍布昆明全城的 100 家门店、四千地产经纪人是我们坚实的后盾。

    6 引用 • 141 回帖 • 585 关注
  • Eclipse

    Eclipse 是一个开放源代码的、基于 Java 的可扩展开发平台。就其本身而言,它只是一个框架和一组服务,用于通过插件组件构建开发环境。

    75 引用 • 258 回帖 • 618 关注
  • Webswing

    Webswing 是一个能将任何 Swing 应用通过纯 HTML5 运行在浏览器中的 Web 服务器,详细介绍请看 将 Java Swing 应用变成 Web 应用

    1 引用 • 15 回帖 • 629 关注
  • 思源笔记

    思源笔记是一款隐私优先的个人知识管理系统,支持完全离线使用,同时也支持端到端加密同步。

    融合块、大纲和双向链接,重构你的思维。

    22346 引用 • 89408 回帖 • 1 关注
  • Dubbo

    Dubbo 是一个分布式服务框架,致力于提供高性能和透明化的 RPC 远程服务调用方案,是 [阿里巴巴] SOA 服务化治理方案的核心框架,每天为 2,000+ 个服务提供 3,000,000,000+ 次访问量支持,并被广泛应用于阿里巴巴集团的各成员站点。

    60 引用 • 82 回帖 • 595 关注
  • 黑曜石

    黑曜石是一款强大的知识库工具,支持本地 Markdown 文件编辑,支持双向链接和关系图。

    A second brain, for you, forever.

    15 引用 • 122 回帖
  • GitBook

    GitBook 使您的团队可以轻松编写和维护高质量的文档。 分享知识,提高团队的工作效率,让用户满意。

    3 引用 • 8 回帖 • 4 关注
  • WiFiDog

    WiFiDog 是一套开源的无线热点认证管理工具,主要功能包括:位置相关的内容递送;用户认证和授权;集中式网络监控。

    1 引用 • 7 回帖 • 587 关注
  • 代码片段

    代码片段分为 CSS 与 JS 两种代码,添加在 [设置 - 外观 - 代码片段] 中,这些代码会在思源笔记加载时自动执行,用于改善笔记的样式或功能。

    用户在该标签下分享代码片段时需在帖子标题前添加 [css] [js] 用于区分代码片段类型。

    70 引用 • 375 回帖 • 1 关注
  • Flutter

    Flutter 是谷歌的移动 UI 框架,可以快速在 iOS 和 Android 上构建高质量的原生用户界面。 Flutter 可以与现有的代码一起工作,它正在被越来越多的开发者和组织使用,并且 Flutter 是完全免费、开源的。

    39 引用 • 92 回帖
  • ReactiveX

    ReactiveX 是一个专注于异步编程与控制可观察数据(或者事件)流的 API。它组合了观察者模式,迭代器模式和函数式编程的优秀思想。

    1 引用 • 2 回帖 • 155 关注
  • 运维

    互联网运维工作,以服务为中心,以稳定、安全、高效为三个基本点,确保公司的互联网业务能够 7×24 小时为用户提供高质量的服务。

    149 引用 • 257 回帖
  • 招聘

    哪里都缺人,哪里都不缺人。

    190 引用 • 1057 回帖
  • Lute

    Lute 是一款结构化的 Markdown 引擎,支持 Go 和 JavaScript。

    25 引用 • 191 回帖 • 16 关注
  • SSL

    SSL(Secure Sockets Layer 安全套接层),及其继任者传输层安全(Transport Layer Security,TLS)是为网络通信提供安全及数据完整性的一种安全协议。TLS 与 SSL 在传输层对网络连接进行加密。

    70 引用 • 193 回帖 • 431 关注
  • TensorFlow

    TensorFlow 是一个采用数据流图(data flow graphs),用于数值计算的开源软件库。节点(Nodes)在图中表示数学操作,图中的线(edges)则表示在节点间相互联系的多维数据数组,即张量(tensor)。

    20 引用 • 19 回帖
  • Ubuntu

    Ubuntu(友帮拓、优般图、乌班图)是一个以桌面应用为主的 Linux 操作系统,其名称来自非洲南部祖鲁语或豪萨语的“ubuntu”一词,意思是“人性”、“我的存在是因为大家的存在”,是非洲传统的一种价值观,类似华人社会的“仁爱”思想。Ubuntu 的目标在于为一般用户提供一个最新的、同时又相当稳定的主要由自由软件构建而成的操作系统。

    125 引用 • 169 回帖 • 1 关注
  • Love2D

    Love2D 是一个开源的, 跨平台的 2D 游戏引擎。使用纯 Lua 脚本来进行游戏开发。目前支持的平台有 Windows, Mac OS X, Linux, Android 和 iOS。

    14 引用 • 53 回帖 • 530 关注
  • Laravel

    Laravel 是一套简洁、优雅的 PHP Web 开发框架。它采用 MVC 设计,是一款崇尚开发效率的全栈框架。

    20 引用 • 23 回帖 • 721 关注
  • 设计模式

    设计模式(Design pattern)代表了最佳的实践,通常被有经验的面向对象的软件开发人员所采用。设计模式是软件开发人员在软件开发过程中面临的一般问题的解决方案。这些解决方案是众多软件开发人员经过相当长的一段时间的试验和错误总结出来的。

    200 引用 • 120 回帖 • 1 关注
  • C

    C 语言是一门通用计算机编程语言,应用广泛。C 语言的设计目标是提供一种能以简易的方式编译、处理低级存储器、产生少量的机器码以及不需要任何运行环境支持便能运行的编程语言。

    85 引用 • 165 回帖 • 1 关注
  • Java

    Java 是一种可以撰写跨平台应用软件的面向对象的程序设计语言,是由 Sun Microsystems 公司于 1995 年 5 月推出的。Java 技术具有卓越的通用性、高效性、平台移植性和安全性。

    3187 引用 • 8213 回帖
  • Telegram

    Telegram 是一个非盈利性、基于云端的即时消息服务。它提供了支持各大操作系统平台的开源的客户端,也提供了很多强大的 APIs 给开发者创建自己的客户端和机器人。

    5 引用 • 35 回帖 • 1 关注
  • 数据库

    据说 99% 的性能瓶颈都在数据库。

    341 引用 • 708 回帖
  • Scala

    Scala 是一门多范式的编程语言,集成面向对象编程和函数式编程的各种特性。

    13 引用 • 11 回帖 • 130 关注
  • CentOS

    CentOS(Community Enterprise Operating System)是 Linux 发行版之一,它是来自于 Red Hat Enterprise Linux 依照开放源代码规定释出的源代码所编译而成。由于出自同样的源代码,因此有些要求高度稳定的服务器以 CentOS 替代商业版的 Red Hat Enterprise Linux 使用。两者的不同在于 CentOS 并不包含封闭源代码软件。

    238 引用 • 224 回帖
  • 知乎

    知乎是网络问答社区,连接各行各业的用户。用户分享着彼此的知识、经验和见解,为中文互联网源源不断地提供多种多样的信息。

    10 引用 • 66 回帖