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

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

主题提要

我 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!

    396 引用 • 3416 回帖
  • GitHub

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

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

相关帖子

欢迎来到这里!

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

注册 关于
请输入回帖内容 ...
  • 嘻嘻。谢谢两位大佬的建议 🙏

    1 回复
    1 操作
    taoism-o 在 2019-11-04 09:23:15 更新了该回帖
  • 其他回帖
  • 感谢 D 佬 🙏

  • SignV

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

  • SignV

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

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

推荐标签 标签

  • AngularJS

    AngularJS 诞生于 2009 年,由 Misko Hevery 等人创建,后为 Google 所收购。是一款优秀的前端 JS 框架,已经被用于 Google 的多款产品当中。AngularJS 有着诸多特性,最为核心的是:MVC、模块化、自动化双向数据绑定、语义化标签、依赖注入等。2.0 版本后已经改名为 Angular。

    12 引用 • 50 回帖 • 423 关注
  • V2EX

    V2EX 是创意工作者们的社区。这里目前汇聚了超过 400,000 名主要来自互联网行业、游戏行业和媒体行业的创意工作者。V2EX 希望能够成为创意工作者们的生活和事业的一部分。

    17 引用 • 236 回帖 • 418 关注
  • OAuth

    OAuth 协议为用户资源的授权提供了一个安全的、开放而又简易的标准。与以往的授权方式不同之处是 oAuth 的授权不会使第三方触及到用户的帐号信息(如用户名与密码),即第三方无需使用用户的用户名与密码就可以申请获得该用户资源的授权,因此 oAuth 是安全的。oAuth 是 Open Authorization 的简写。

    36 引用 • 103 回帖 • 9 关注
  • JWT

    JWT(JSON Web Token)是一种用于双方之间传递信息的简洁的、安全的表述性声明规范。JWT 作为一个开放的标准(RFC 7519),定义了一种简洁的,自包含的方法用于通信双方之间以 JSON 的形式安全的传递信息。

    20 引用 • 15 回帖 • 20 关注
  • FlowUs

    FlowUs.息流 个人及团队的新一代生产力工具。

    让复杂的信息管理更轻松、自由、充满创意。

    1 引用
  • JVM

    JVM(Java Virtual Machine)Java 虚拟机是一个微型操作系统,有自己的硬件构架体系,还有相应的指令系统。能够识别 Java 独特的 .class 文件(字节码),能够将这些文件中的信息读取出来,使得 Java 程序只需要生成 Java 虚拟机上的字节码后就能在不同操作系统平台上进行运行。

    180 引用 • 120 回帖 • 2 关注
  • 微信

    腾讯公司 2011 年 1 月 21 日推出的一款手机通讯软件。用户可以通过摇一摇、搜索号码、扫描二维码等添加好友和关注公众平台,同时可以将自己看到的精彩内容分享到微信朋友圈。

    129 引用 • 793 回帖
  • JRebel

    JRebel 是一款 Java 虚拟机插件,它使得 Java 程序员能在不进行重部署的情况下,即时看到代码的改变对一个应用程序带来的影响。

    26 引用 • 78 回帖 • 623 关注
  • Vim

    Vim 是类 UNIX 系统文本编辑器 Vi 的加强版本,加入了更多特性来帮助编辑源代码。Vim 的部分增强功能包括文件比较(vimdiff)、语法高亮、全面的帮助系统、本地脚本(Vimscript)和便于选择的可视化模式。

    27 引用 • 66 回帖
  • SOHO

    为成为自由职业者在家办公而努力吧!

    7 引用 • 55 回帖 • 92 关注
  • Log4j

    Log4j 是 Apache 开源的一款使用广泛的 Java 日志组件。

    20 引用 • 18 回帖 • 41 关注
  • 旅游

    希望你我能在旅途中找到人生的下一站。

    85 引用 • 895 回帖 • 1 关注
  • SQLServer

    SQL Server 是由 [微软] 开发和推广的关系数据库管理系统(DBMS),它最初是由 微软、Sybase 和 Ashton-Tate 三家公司共同开发的,并于 1988 年推出了第一个 OS/2 版本。

    19 引用 • 31 回帖 • 2 关注
  • B3log

    B3log 是一个开源组织,名字来源于“Bulletin Board Blog”缩写,目标是将独立博客与论坛结合,形成一种新的网络社区体验,详细请看 B3log 构思。目前 B3log 已经开源了多款产品:SymSoloVditor思源笔记

    1083 引用 • 3461 回帖 • 286 关注
  • Vditor

    Vditor 是一款浏览器端的 Markdown 编辑器,支持所见即所得、即时渲染(类似 Typora)和分屏预览模式。它使用 TypeScript 实现,支持原生 JavaScript、Vue、React 和 Angular。

    313 引用 • 1667 回帖 • 1 关注
  • OnlyOffice
    4 引用 • 23 关注
  • 尊园地产

    昆明尊园房地产经纪有限公司,即:Kunming Zunyuan Property Agency Company Limited(简称“尊园地产”)于 2007 年 6 月开始筹备,2007 年 8 月 18 日正式成立,注册资本 200 万元,公司性质为股份经纪有限公司,主营业务为:代租、代售、代办产权过户、办理银行按揭、担保、抵押、评估等。

    1 引用 • 22 回帖 • 684 关注
  • Scala

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

    13 引用 • 11 回帖 • 108 关注
  • 链书

    链书(Chainbook)是 B3log 开源社区提供的区块链纸质书交易平台,通过 B3T 实现共享激励与价值链。可将你的闲置书籍上架到链书,我们共同构建这个全新的交易平台,让闲置书籍继续发挥它的价值。

    链书社

    链书目前已经下线,也许以后还有计划重制上线。

    14 引用 • 257 回帖 • 2 关注
  • Android

    Android 是一种以 Linux 为基础的开放源码操作系统,主要使用于便携设备。2005 年由 Google 收购注资,并拉拢多家制造商组成开放手机联盟开发改良,逐渐扩展到到平板电脑及其他领域上。

    333 引用 • 323 回帖 • 65 关注
  • sts
    2 引用 • 2 回帖 • 148 关注
  • 爬虫

    网络爬虫(Spider、Crawler),是一种按照一定的规则,自动地抓取万维网信息的程序。

    106 引用 • 275 回帖 • 2 关注
  • RIP

    愿逝者安息!

    8 引用 • 92 回帖 • 290 关注
  • RabbitMQ

    RabbitMQ 是一个开源的 AMQP 实现,服务器端用 Erlang 语言编写,支持多种语言客户端,如:Python、Ruby、.NET、Java、C、PHP、ActionScript 等。用于在分布式系统中存储转发消息,在易用性、扩展性、高可用性等方面表现不俗。

    49 引用 • 60 回帖 • 399 关注
  • golang

    Go 语言是 Google 推出的一种全新的编程语言,可以在不损失应用程序性能的情况下降低代码的复杂性。谷歌首席软件工程师罗布派克(Rob Pike)说:我们之所以开发 Go,是因为过去 10 多年间软件开发的难度令人沮丧。Go 是谷歌 2009 发布的第二款编程语言。

    492 引用 • 1383 回帖 • 375 关注
  • 百度

    百度(Nasdaq:BIDU)是全球最大的中文搜索引擎、最大的中文网站。2000 年 1 月由李彦宏创立于北京中关村,致力于向人们提供“简单,可依赖”的信息获取方式。“百度”二字源于中国宋朝词人辛弃疾的《青玉案·元夕》词句“众里寻他千百度”,象征着百度对中文信息检索技术的执著追求。

    63 引用 • 785 回帖 • 251 关注
  • WebSocket

    WebSocket 是 HTML5 中定义的一种新协议,它实现了浏览器与服务器之间的全双工通信(full-duplex)。

    48 引用 • 206 回帖 • 398 关注