Two version of same dependency - lower version getting ignored

允我心安 提交于 2020-06-13 06:19:51

问题


I have a project in which two dependencies uses different version of same library. For instance, my project has dependency A and dependency B. A and B, both uses a common library/dependency X, but of different versions. A has v1 version of X and B has v2 version of X. So now when I add A & B as dependencies in my project, there are 2 versions of X in my project's go.sum.

I was expecting, the respective versions will be referred at run time by A and B. But it is not the case. Somehow when I run tests on my project, the A is using v2 of X, ideally it should use v1 (because in go.mod of A, explicitly specified/added v1). So it breaks the execution,because there are lot differences in v1 and v2 of X.

So in my project, how can I explicitly specify that to use v1 of X by A and use v2 by B? Is there such provision in go modules?


回答1:


Your B package must import X with a /v2 suffix.

Go Wiki: Modules: Semantic Import versioning:

Recall semver requires a major version change when a v1 or higher package makes a backwards incompatible change. The result of following both the import compatibility rule and semver is called Semantic Import Versioning, where the major version is included in the import path — this ensures the import path changes any time the major version increments due to a break in compatibility.

As a result of Semantic Import Versioning, code opting in to Go modules must comply with these rules:

  • If the module is version v2 or higher, the major version of the module must be included as a /vN at the end of the module paths used in go.mod files (e.g., module github.com/my/mod/v2, require github.com/my/mod/v2 v2.0.0) and in the package import path (e.g., import "github.com/my/mod/v2/mypkg").

This version suffix in the import path will make them 2 "different" packages. If A and B would use the same major version of X, then there would be no 2 versions of it, the higher version would be chosen ("minimal version selection" algorithm). For details, see Version Selection.



来源:https://stackoverflow.com/questions/57602028/two-version-of-same-dependency-lower-version-getting-ignored

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!