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

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

主题提要

我 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 回帖
  • 项目管理
    12 引用 • 51 回帖 • 1 关注

相关帖子

欢迎来到这里!

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

注册 关于
请输入回帖内容 ...
  • 88250 1

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

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

    2 回复
  • SignV

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

    1 回复
  • 感谢 D 佬 🙏

  • 嘻嘻。谢谢两位大佬的建议 🙏

    1 回复
    1 操作
    taoism-o 在 2019-11-04 09:23:15 更新了该回帖
  • SignV

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

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

推荐标签 标签

  • Rust

    Rust 是一门赋予每个人构建可靠且高效软件能力的语言。Rust 由 Mozilla 开发,最早发布于 2014 年 9 月。

    57 引用 • 22 回帖 • 4 关注
  • ReactiveX

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

    1 引用 • 2 回帖 • 126 关注
  • frp

    frp 是一个可用于内网穿透的高性能的反向代理应用,支持 TCP、UDP、 HTTP 和 HTTPS 协议。

    15 引用 • 7 回帖 • 10 关注
  • IPFS

    IPFS(InterPlanetary File System,星际文件系统)是永久的、去中心化保存和共享文件的方法,这是一种内容可寻址、版本化、点对点超媒体的分布式协议。请浏览 IPFS 入门笔记了解更多细节。

    20 引用 • 245 回帖 • 230 关注
  • TGIF

    Thank God It's Friday! 感谢老天,总算到星期五啦!

    284 引用 • 4481 回帖 • 656 关注
  • SQLServer

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

    19 引用 • 31 回帖 • 4 关注
  • danl
    62 关注
  • Scala

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

    13 引用 • 11 回帖 • 108 关注
  • Tomcat

    Tomcat 最早是由 Sun Microsystems 开发的一个 Servlet 容器,在 1999 年被捐献给 ASF(Apache Software Foundation),隶属于 Jakarta 项目,现在已经独立为一个顶级项目。Tomcat 主要实现了 JavaEE 中的 Servlet、JSP 规范,同时也提供 HTTP 服务,是市场上非常流行的 Java Web 容器。

    162 引用 • 529 回帖 • 2 关注
  • Ngui

    Ngui 是一个 GUI 的排版显示引擎和跨平台的 GUI 应用程序开发框架,基于
    Node.js / OpenGL。目标是在此基础上开发 GUI 应用程序可拥有开发 WEB 应用般简单与速度同时兼顾 Native 应用程序的性能与体验。

    7 引用 • 9 回帖 • 346 关注
  • PWL

    组织简介

    用爱发电 (Programming With Love) 是一个以开源精神为核心的民间开源爱好者技术组织,“用爱发电”象征开源与贡献精神,加入组织,代表你将遵守组织的“个人开源爱好者”的各项条款。申请加入:用爱发电组织邀请帖
    用爱发电组织官网:https://programmingwithlove.stackoverflow.wiki/

    用爱发电组织的核心驱动力:

    • 遵守开源守则,体现开源&贡献精神:以分享为目的,拒绝非法牟利。
    • 自我保护:使用适当的 License 保护自己的原创作品。
    • 尊重他人:不以各种理由、各种漏洞进行未经允许的抄袭、散播、洩露;以礼相待,尊重所有对社区做出贡献的开发者;通过他人的分享习得知识,要留下足迹,表示感谢。
    • 热爱编程、热爱学习:加入组织,热爱编程是首当其要的。我们欢迎热爱讨论、分享、提问的朋友,也同样欢迎默默成就的朋友。
    • 倾听:正确并恳切对待、处理问题与建议,及时修复开源项目的 Bug ,及时与反馈者沟通。不抬杠、不无视、不辱骂。
    • 平视:不诋毁、轻视、嘲讽其他开发者,主动提出建议、施以帮助,以和谐为本。只要他人肯努力,你也可能会被昔日小看的人所超越,所以请保持谦虚。
    • 乐观且活跃:你的努力决定了你的高度。不要放弃,多年后回头俯瞰,才会发现自己已经成就往日所仰望的水平。积极地将项目开源,帮助他人学习、改进,自己也会获得相应的提升、成就与成就感。
    1 引用 • 487 回帖 • 8 关注
  • 招聘

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

    189 引用 • 1056 回帖 • 2 关注
  • CodeMirror
    1 引用 • 2 回帖 • 116 关注
  • Elasticsearch

    Elasticsearch 是一个基于 Lucene 的搜索服务器。它提供了一个分布式多用户能力的全文搜索引擎,基于 RESTful 接口。Elasticsearch 是用 Java 开发的,并作为 Apache 许可条款下的开放源码发布,是当前流行的企业级搜索引擎。设计用于云计算中,能够达到实时搜索,稳定,可靠,快速,安装使用方便。

    116 引用 • 99 回帖 • 267 关注
  • JRebel

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

    26 引用 • 78 回帖 • 622 关注
  • Sublime

    Sublime Text 是一款可以用来写代码、写文章的文本编辑器。支持代码高亮、自动完成,还支持通过插件进行扩展。

    10 引用 • 5 回帖
  • 书籍

    宋真宗赵恒曾经说过:“书中自有黄金屋,书中自有颜如玉。”

    76 引用 • 390 回帖
  • Ubuntu

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

    123 引用 • 168 回帖
  • React

    React 是 Facebook 开源的一个用于构建 UI 的 JavaScript 库。

    192 引用 • 291 回帖 • 440 关注
  • OpenResty

    OpenResty 是一个基于 NGINX 与 Lua 的高性能 Web 平台,其内部集成了大量精良的 Lua 库、第三方模块以及大多数的依赖项。用于方便地搭建能够处理超高并发、扩展性极高的动态 Web 应用、Web 服务和动态网关。

    17 引用 • 37 关注
  • PWA

    PWA(Progressive Web App)是 Google 在 2015 年提出、2016 年 6 月开始推广的项目。它结合了一系列现代 Web 技术,在网页应用中实现和原生应用相近的用户体验。

    14 引用 • 69 回帖 • 133 关注
  • Vim

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

    27 引用 • 66 回帖
  • AngularJS

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

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

    Mozilla Firefox 中文俗称“火狐”(正式缩写为 Fx 或 fx,非正式缩写为 FF),是一个开源的网页浏览器,使用 Gecko 排版引擎,支持多种操作系统,如 Windows、OSX 及 Linux 等。

    7 引用 • 30 回帖 • 452 关注
  • 安全

    安全永远都不是一个小问题。

    189 引用 • 813 回帖
  • 心情

    心是产生任何想法的源泉,心本体会陷入到对自己本体不能理解的状态中,因为心能产生任何想法,不能分出对错,不能分出自己。

    59 引用 • 369 回帖 • 1 关注
  • 周末

    星期六到星期天晚,实行五天工作制后,指每周的最后两天。再过几年可能就是三天了。

    14 引用 • 297 回帖