假设我的项目A依赖于依赖库C的库B.
图书馆B将依赖版本设置为“*”(任意),因此货物将下载最新版本的C。
如何指示货物使用特定版本的库C构建库B?
目前我正在尝试构建iron。
当前构建失败,但我可以在https://travis-ci.org/iron/iron/builds/45254195中看到上一次成功构建,包括防锈版本和货物包版本。
所以我下载了构建中使用的每晚特定的锈,我通过编辑Cargo.toml设置了铁的直接依赖关系:#/ p>
(...)
[dependencies]
hyper = "0.0.18"
typemap = "0.0.5"
url = "0.2.9"
(...)
但是,生锈序列化,这是“url”和“time”软件包的依赖项,是在最新版本中下载的,不能用我特定的生锈版本编译。
如果我使用上面Travis构建中使用的版本,我确信它会成功编译。
答案 0 :(得分:2)
我认为您将不得不查看Iron,修改Cargo.toml
以指定版本(正如您已经完成的那样)。然后,您需要重复此过程,检出url
,修改其Cargo.toml
,然后确保您在Iron url
中使用的是Cargo.toml
版本。冲洗并重复。这听起来很可怕: - (
来自Cargo docs:
与之前类似,假设您正在开展一个项目
uuid
,这取决于rand
。这次您是rand
中发现错误的人,并且您希望编写补丁并能够使用rand
中的uuid
版本来测试您的补丁}。路径覆盖通过
.cargo/config
配置机制传达给Cargo。如果Cargo在构建包时发现此配置,它将使用本地计算机上的覆盖而不是Cargo.toml
中指定的来源。在该文件中,输入:
paths = ["/path/to/project/rand"]
注意这可能不会奏效。有人在我第一次启动Rust时告诉我的一件事是你可以将同一个库的多个版本编译成一个二进制文件。这意味着没有一个地方可以指定一个适用于所有地方的版本,就像使用Gemfile一样。
您可以简单地为您知道适用于Rust版本的每个依赖项指定版本(或SHA哈希?)。 Cargo应该能够解决传递依赖关系并简单地将您锁定到以前的版本(如果有一个符合所有要求)。
答案 1 :(得分:1)
自从提供了答案后,Cargo已在清单中添加了[patch]
部分,您可以执行此用例。