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

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

主题提要

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

    407 引用 • 3578 回帖
  • GitHub

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

    210 引用 • 2036 回帖
  • 仓库
    5 引用 • 9 回帖
  • 项目管理
    26 引用 • 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 开发工程师 / 想转算法 / 看好人工智能 / 金融 / 经济。。。 香港

推荐标签 标签

  • 智能合约

    智能合约(Smart contract)是一种旨在以信息化方式传播、验证或执行合同的计算机协议。智能合约允许在没有第三方的情况下进行可信交易,这些交易可追踪且不可逆转。智能合约概念于 1994 年由 Nick Szabo 首次提出。

    1 引用 • 11 回帖 • 2 关注
  • SpaceVim

    SpaceVim 是一个社区驱动的模块化 vim/neovim 配置集合,以模块的方式组织管理插件以
    及相关配置,为不同的语言开发量身定制了相关的开发模块,该模块提供代码自动补全,
    语法检查、格式化、调试、REPL 等特性。用户仅需载入相关语言的模块即可得到一个开箱
    即用的 Vim-IDE。

    3 引用 • 31 回帖 • 104 关注
  • 京东

    京东是中国最大的自营式电商企业,2015 年第一季度在中国自营式 B2C 电商市场的占有率为 56.3%。2014 年 5 月,京东在美国纳斯达克证券交易所正式挂牌上市(股票代码:JD),是中国第一个成功赴美上市的大型综合型电商平台,与腾讯、百度等中国互联网巨头共同跻身全球前十大互联网公司排行榜。

    14 引用 • 102 回帖 • 354 关注
  • 大数据

    大数据(big data)是指无法在一定时间范围内用常规软件工具进行捕捉、管理和处理的数据集合,是需要新处理模式才能具有更强的决策力、洞察发现力和流程优化能力的海量、高增长率和多样化的信息资产。

    93 引用 • 113 回帖
  • 博客

    记录并分享人生的经历。

    273 引用 • 2388 回帖
  • 房星科技

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

    6 引用 • 141 回帖 • 584 关注
  • WebComponents

    Web Components 是 W3C 定义的标准,它给了前端开发者扩展浏览器标签的能力,可以方便地定制可复用组件,更好的进行模块化开发,解放了前端开发者的生产力。

    1 引用 • 5 关注
  • Jenkins

    Jenkins 是一套开源的持续集成工具。它提供了非常丰富的插件,让构建、部署、自动化集成项目变得简单易用。

    53 引用 • 37 回帖 • 3 关注
  • Ant-Design

    Ant Design 是服务于企业级产品的设计体系,基于确定和自然的设计价值观上的模块化解决方案,让设计者和开发者专注于更好的用户体验。

    17 引用 • 23 回帖 • 4 关注
  • 以太坊

    以太坊(Ethereum)并不是一个机构,而是一款能够在区块链上实现智能合约、开源的底层系统。以太坊是一个平台和一种编程语言 Solidity,使开发人员能够建立和发布下一代去中心化应用。 以太坊可以用来编程、分散、担保和交易任何事物:投票、域名、金融交易所、众筹、公司管理、合同和知识产权等等。

    34 引用 • 367 回帖
  • danl
    146 关注
  • 钉钉

    钉钉,专为中国企业打造的免费沟通协同多端平台, 阿里巴巴出品。

    15 引用 • 67 回帖 • 335 关注
  • App

    App(应用程序,Application 的缩写)一般指手机软件。

    91 引用 • 384 回帖 • 2 关注
  • uTools

    uTools 是一个极简、插件化、跨平台的现代桌面软件。通过自由选配丰富的插件,打造你得心应手的工具集合。

    6 引用 • 14 回帖
  • Chrome

    Chrome 又称 Google 浏览器,是一个由谷歌公司开发的网页浏览器。该浏览器是基于其他开源软件所编写,包括 WebKit,目标是提升稳定性、速度和安全性,并创造出简单且有效率的使用者界面。

    62 引用 • 289 回帖
  • Solo

    Solo 是一款小而美的开源博客系统,专为程序员设计。Solo 有着非常活跃的社区,可将文章作为帖子推送到社区,来自社区的回帖将作为博客评论进行联动(具体细节请浏览 B3log 构思 - 分布式社区网络)。

    这是一种全新的网络社区体验,让热爱记录和分享的你不再感到孤单!

    1435 引用 • 10056 回帖 • 489 关注
  • 设计模式

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

    200 引用 • 120 回帖
  • 单点登录

    单点登录(Single Sign On)是目前比较流行的企业业务整合的解决方案之一。SSO 的定义是在多个应用系统中,用户只需要登录一次就可以访问所有相互信任的应用系统。

    9 引用 • 25 回帖
  • 域名

    域名(Domain Name),简称域名、网域,是由一串用点分隔的名字组成的 Internet 上某一台计算机或计算机组的名称,用于在数据传输时标识计算机的电子方位(有时也指地理位置)。

    43 引用 • 208 回帖
  • JVM

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

    180 引用 • 120 回帖 • 2 关注
  • Sym

    Sym 是一款用 Java 实现的现代化社区(论坛/BBS/社交网络/博客)系统平台。

    下一代的社区系统,为未来而构建

    524 引用 • 4601 回帖 • 700 关注
  • 外包

    有空闲时间是接外包好呢还是学习好呢?

    26 引用 • 232 回帖
  • 大疆创新

    深圳市大疆创新科技有限公司(DJI-Innovations,简称 DJI),成立于 2006 年,是全球领先的无人飞行器控制系统及无人机解决方案的研发和生产商,客户遍布全球 100 多个国家。通过持续的创新,大疆致力于为无人机工业、行业用户以及专业航拍应用提供性能最强、体验最佳的革命性智能飞控产品和解决方案。

    2 引用 • 14 回帖 • 2 关注
  • 正则表达式

    正则表达式(Regular Expression)使用单个字符串来描述、匹配一系列遵循某个句法规则的字符串。

    31 引用 • 94 回帖 • 2 关注
  • HBase

    HBase 是一个分布式的、面向列的开源数据库,该技术来源于 Fay Chang 所撰写的 Google 论文 “Bigtable:一个结构化数据的分布式存储系统”。就像 Bigtable 利用了 Google 文件系统所提供的分布式数据存储一样,HBase 在 Hadoop 之上提供了类似于 Bigtable 的能力。

    17 引用 • 6 回帖 • 75 关注
  • Webswing

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

    1 引用 • 15 回帖 • 637 关注
  • 阿里云

    阿里云是阿里巴巴集团旗下公司,是全球领先的云计算及人工智能科技公司。提供云服务器、云数据库、云安全等云计算服务,以及大数据、人工智能服务、精准定制基于场景的行业解决方案。

    89 引用 • 345 回帖