在具有大量依赖项的项目中进行依赖项管理的最佳实践

     2023-03-24     20

关键词:

【中文标题】在具有大量依赖项的项目中进行依赖项管理的最佳实践【英文标题】:Best practice for dependency management in a project with a huge number of dependencies 【发布时间】:2014-07-18 04:00:05 【问题描述】:

我们的项目就像一个适配器/外观接口,用于大量不同的其他库。依赖关系以某种方式重叠,有时会发生冲突,有时甚至会因为错误版本的依赖项提供相同接口的错误行为而使项目静默中断。 我们使用 Ivy 和 Ant 来做基本的依赖管理。 管理依赖关系和及早检测错误行为的最佳做法是什么?

【问题讨论】:

其他库是你写的还是第三方的? 当你有冲突的版本,并且版本控制是由传递依赖管理系统提供的,你有点陷入困境和困难的地方,可能需要做一些依赖树之类的事情(我不知道如何用 Ivy 做到这一点)并开始手动找出冲突。即使使用 Maven,您也必须手动执行操作,尽管它可以告诉您为什么由于冲突而省略了库,例如maven.apache.org/plugins/maven-dependency-plugin/examples/… @DaveSchweisguth 它们主要是我们自己的库,但由不同团队甚至跨团队管理。 如果您的内部库为接口提供“错误行为”,或者静默失败,则没有任何依赖管理系统能够对此做很多事情。 @Dmitri 这是由于提供的版本错误。我正在为此寻找一些指导方针。我知道没有任何系统可以单独做到这一点...... :( 【参考方案1】:

这个问题的重要部分是关于过程,而不是工具。

如果项目的依赖项由其他团队或第三方拥有,则该项目必须明确接受每个新依赖项的每个新版本。允许依赖项自行升级将允许它们在没有警告的情况下破坏依赖项项目,这听起来像是正在发生的事情。

每个依赖项都必须发布已知版本,无论是作为版本控制中的二进制文件或标签,还是适合您的堆栈的任何内容。每次项目想要升级依赖项时,都必须测试升级的结果。 (像往常一样,全面的自动化测试将有很大帮助。)如果失败(因为依赖关系刚刚被破坏,或者因为依赖关系带来了传递依赖的不兼容版本),放弃升级,向所有者报告问题依赖项,并在他们发布解决问题的版本后重试。如果成功,请更改项目在其构建配置中使用的依赖项的版本。

理想情况下,项目将一次升级一个依赖项,并分别对每个升级进行全面测试。如果需要一次升级多个依赖项(可能是因为两个依赖项都依赖于第三个依赖项,而第三个依赖项在系统中只能有一个版本),那很好,尽管这是一个更大的更改,因此风险更大。如果您的项目具有这样的传递依赖项,那么值得进行工程努力以使其在合理的多个版本上向后兼容。

当然,许多工具很容易支持这个过程:只需将每个依赖项固定到特定版本。

【讨论】:

AWS lambda 的 node_module 错误,依赖项的最佳实践是啥?

】AWSlambda的node_module错误,依赖项的最佳实践是啥?【英文标题】:node_moduleerrorswithAWSlambda,what\'sthebestpracticefordependencies?AWSlambda的node_module错误,依赖项的最佳实践是什么?【发布时间】:2015-10-1408:58:16【问题描述】:我一直在... 查看详情

在 Lua 项目中管理开发依赖项的推荐方法是啥?

】在Lua项目中管理开发依赖项的推荐方法是啥?【英文标题】:WhatistherecommendedwaytomanagedevdependenciesinLuaprojects?在Lua项目中管理开发依赖项的推荐方法是什么?【发布时间】:2019-01-2613:14:44【问题描述】:我正在构建一个Lua库(实... 查看详情

在 OSGi 包中添加第三方 Maven 依赖项的最佳方法

】在OSGi包中添加第三方Maven依赖项的最佳方法【英文标题】:BestwaytoaddThirdpartymavendependenciesinOSGibundle【发布时间】:2013-08-3020:00:49【问题描述】:我刚刚开始进行OSGI开发,正在努力了解处理依赖/第三方JAR或maven依赖项的最佳方... 查看详情

在 Maven 中跟踪托管依赖项版本

...时间】:2012-12-2810:43:20【问题描述】:假设我有一个包含大量依赖项的复杂项目。依赖项的版本由许多导入范围pom管理。我的项目依赖于工件group:artifact,它依赖于工件group:transitive-dependency。当我运行dependency:tree时,我看到了这... 查看详情

mvn 命令用于更新依赖项中的版本和一个使用该依赖项的项目

】mvn命令用于更新依赖项中的版本和一个使用该依赖项的项目【英文标题】:mvncommandforupdatingversionindependencyandoneprojectthatusesthedependency【发布时间】:2020-11-2817:01:33【问题描述】:我正在尝试找出在POM文件中更新版本的最佳实践... 查看详情

在实际生产项目中部署(管理依赖)django 可重用应用程序的最佳实践是啥?

】在实际生产项目中部署(管理依赖)django可重用应用程序的最佳实践是啥?【英文标题】:What\'sthebestpracticetodeploy(managedependency)thedjangoreusableappsinarealproductionproject?在实际生产项目中部署(管理依赖)django可重用应用程序的最... 查看详情

在 PInvoke 中管理大量 3rdparty 依赖项以提高编译速度

...情况:我正在从事一个研究项目,由于某些限制,该项目具有C#用户界面(主要用于可视化),但大部分处理都是使用PInvoke和非托管C++代码进行的。非托管代码对各种 查看详情

再见requirements.txt,python管理依赖项请用pip

...例子来解释使用它的主要问题。你安装依赖项F,它恰好具有G作为子依赖项。一段时间后,在requirements.txt中看到的只是A、B、C、D、E、F、G、H作为你的依赖项。你不知道直接或间接安装了哪些依赖项,因此现在更新甚至删除F成为... 查看详情

具有项目编译依赖项的 Gradle 嵌套多项目

】具有项目编译依赖项的Gradle嵌套多项目【英文标题】:Gradlenestedmulti-projectswithprojectcompiledependencies【发布时间】:2012-11-1517:53:39【问题描述】:我有一个与GradleMulti-ModuleProjectSetup相同的问题,但我必须使用项目编译依赖项来构... 查看详情

在 Yarn 2 (berry) 中审计依赖项的最佳方法是啥?

】在Yarn2(berry)中审计依赖项的最佳方法是啥?【英文标题】:BestwaytoauditdependenciesinYarn2(berry)?在Yarn2(berry)中审计依赖项的最佳方法是什么?【发布时间】:2020-12-0109:20:58【问题描述】:我正在寻找一种方法来审核Yarn2中漏洞的依... 查看详情

如何使用 Maven 创建具有依赖项的可执行 JAR?

】如何使用Maven创建具有依赖项的可执行JAR?【英文标题】:HowcanIcreateanexecutableJARwithdependenciesusingMaven?【发布时间】:2021-09-0402:36:59【问题描述】:我想将我的项目打包到一个可执行的JAR中进行分发。如何让一个Maven项目将所有... 查看详情

重新创建没有依赖项的github项目(java)

...epo。脚本将在一个应用程序中运行,该应用程序要求脚本具有最小的依赖性。我的意思是它可以依赖于独立的.jar或库,但不能依赖于具有进一步依赖性的.jar或库。这是一项安全措施。我的脚本需要依赖于GitHub项目,但该项目也... 查看详情

如何导出具有依赖项的 SVN 存储库的一部分?

】如何导出具有依赖项的SVN存储库的一部分?【英文标题】:HowdoIexportapartofanSVNrepositorywithdependencies?【发布时间】:2008-11-0312:19:32【问题描述】:我正在尝试使用svnadmindump迁移SVN存储库的一部分。提供的svndumpfilter工具不管理来... 查看详情

在android中创建一个具有依赖项的库

】在android中创建一个具有依赖项的库【英文标题】:Createalibrarywithdependenciesinandroid【发布时间】:2016-09-0104:00:36【问题描述】:我创建了一个库“LibA”,它依赖于许多3rd方库,如RecyclerView、EventBus等。当我尝试将它作为aar包含... 查看详情

如何在另一个具有更高spring版本的spring项目中使用具有spring作为打包依赖项的jar?(代码片段)

...A和项目B。Project-A中使用的SpringFramework版本为4.2.3。使用具有NO特殊配置的shade-plugin,将Project-A中的某些模块组合并内置到uber 查看详情

MySql:在联结表中选择具有相同依赖项的条目

】MySql:在联结表中选择具有相同依赖项的条目【英文标题】:MySql:Selectentrieswithsamedependenciesinjunctiontable【发布时间】:2021-05-0622:22:58【问题描述】:这些是我的桌子:languagelanguage_personperson+----+----------++----+-----------+-----------++--... 查看详情

关于使用 fmt 作为 CMake 依赖项的问题

】关于使用fmt作为CMake依赖项的问题【英文标题】:IssueonusingfmtasadependencywithCMake关于使用fmt作为CMake依赖项的问题【发布时间】:2018-04-1009:47:16【问题描述】:我正在尝试在我的项目中应用现代CMake实践。我遇到了fmtlibrary依赖项... 查看详情

用于仅测试依赖项的 Gradle 变体感知依赖项管理

】用于仅测试依赖项的Gradle变体感知依赖项管理【英文标题】:Gradlevariant-awaredependencymanagementfortest-onlydependency【发布时间】:2020-02-2917:59:47【问题描述】:我有一个多模块Android项目,该项目有一个模块,该模块仅用于通过testImp... 查看详情