当前位置: 首页 > 面试题库 >

具有相同依赖项的两个版本-较低版本被忽略

扈沛
2023-03-14
问题内容

我有一个项目,其中两个依赖项使用同一库的不同版本。例如,我的项目具有dependency A和dependency
BAB都使用通用的库/依赖项X,但版本不同。A拥有v1的版本XB具有v2的版本X。所以,现在当我添加AB在我的项目依赖,有2个版本,X在我的项目的go.sum

我期望在运行时由A和引用各个版本B。但事实并非如此。不知怎的,当我在我的项目运行测试时,A使用v2X,最好应使用v1(因为在go.modA,明确指定/加v1)。所以,它打破了执行,因为有很多在差异v1v2X

所以,在我的项目,我怎么能明确指定要使用v1X通过A 和使用v2B?go模块中是否有此类规定?


问题答案:

您的B软件包必须X带有/v2后缀。

转到Wiki:模块:语义导入版本控制:

当v1或更高版本的软件包进行向后不兼容的更改时,召回semver需要对主要版本进行更改。遵循导入兼容性规则和semver的结果称为
语义导入版本控制Semantic Import Versioning)
,其中主要版本包含在导入路径中–这可确保在主要版本由于兼容性中断而增加时,导入路径会随时更改。

语义导入版本控制的结果是,加入Go模块的代码 必须遵守以下规则:

  • 如果模块的版本为v2或更高版本,则必须/vNgo.mod文件(例如module github.com/my/mod/v2require github.com/my/mod/v2 v2.0.0)中使用的模块路径的末尾,以及包导入路径(例如,import "github.com/my/mod/v2/mypkg")中包含的模块主版本作为。

导入路径中的此版本后缀将使它们成为2个“不同”的软件包。如果AB将使用的相同主版本X,则将不会有2个主版本,则将选择较高版本(“最小版本选择”算法)。有关详细信息,请参见版本选择。



 类似资料:
  • 问题内容: 我正在为Java中的ERP系统进行定制。在我的定制中,我想使用Apache POI 3.10.1。因此,我集成了jars poi-3.10.1-20140818.jar和poi-ooxml-3.10.1-20140818.jar。 但是,这些jar包含几个类,这些类已经包含在ERP系统的核心代码中,但是有所不同。 如果核心ERP类覆盖POI类,则定制将引发运行时异常。如果POI类覆盖核

  • 问题内容: 我刚刚遇到了一个案例,即我的Maven项目有两个直接依赖项,其中有两个不同版本的特定传递性依赖项。 在我的特殊情况下,我直接依赖以下内容: 和 这两个依赖项都对com.sun.jersey:jersey- core具有(较深)的传递性依赖关系,但是每个都有不同的版本。Maven并没有失败,甚至没有警告(或者,如果没有,我从来没有看到过!)正在发生这样的事情……因此,直到调试了球衣版本时

  • 问题内容: 我使用以下两个依赖项: 两者必须为同一版本才能正常工作。由于我的其他依赖项使用更高的版本,因此Gradle为每个依赖项使用不同的版本。 我通过运行发现了这一点: 如何强制Gradle为这两个依赖项设置相同的版本? 问题答案: 您的依赖项之一是强制更新番石榴版本。使用以定位库驱逐你的版本。 您遇到的问题是,如果您强迫它使用14.0.1,则另一个库可能无法正常工作。您是否可以仅使用17.0

  • 我使用以下两个依赖项: 两者必须是相同的版本才能正常工作。由于我的其他依赖项使用更高的版本,Gradle为每个依赖项使用不同的版本。 我通过运行找到了这一点: 如何强制Gradle为这两个依赖项设置相同的版本?

  • 我已经读过这个线程,com.android.support库必须使用完全相同的版本规范和许多其他类似的线程,但没有一个答案解决了我的问题。 错误:-

  • 问题内容: 我有一个独立使用两个依赖项的项目:BoneCP和Hibernate。但是由于SLF4J及其版本冲突,它无法正常工作,因为BoneCP需要SLF4J 1.5,而Hibernate需要SLF4j 1.6。如您所知,在pom.xml中不可能同时具有相同依赖项的两个不同版本。所以,我该怎么办才能解决这种惊人的SLF4J副作用??? 我得到的错误是臭名昭著的: 我需要添加它,但是不允许具有两个不