我根据这里的教程创建了一个包含多个文件夹的"工作区"。
使用cargo run
或cargo build
可以成功运行它。
如果所有的包都彼此独立,那么cargo package
将能够成功运行。但是,只要一个包依赖于另一个包,cargo package
就会失败。
它会显示:no matching package named "foo_2" found. location searched: registry "crates-io"
。这相当奇怪,因为我明确地在依赖项中添加了一个本地路径。
这是一个预期的行为吗?如果是的话,那么我为什么还要使用工作区呢?
根目录下的Cargo.toml文件:
[workspace]
members = [
"foo_1",
"foo_2",
]
foo_1/Cargo.toml
[package]
name = "foo_1"
version = "0.1.0"
edition = "2021"
# error here. It can't found the foo_2 package.
[dependencies]
foo_2 = { path = "../foo_2", version = "0.1.0" }
foo_2/Cargo.toml
[package]
name = "foo_2"
version = "0.1.0"
edition = "2021"
[dependencies]
Error message:
PS E:\Works\Experimentals\rust-workspace> cargo package --workspace
warning: manifest has no description, license, license-file, documentation, homepage or repository.
See https://doc.rust-lang.org/cargo/reference/manifest.html#package-metadata for more info.
Packaging foo_1 v0.1.0 (E:\Works\Experimentals\rust-workspace\foo_1)
Verifying foo_1 v0.1.0 (E:\Works\Experimentals\rust-workspace\foo_1)
Updating crates.io index
error: failed to verify package tarball
Caused by:
no matching package named `foo_2` found
location searched: registry `crates-io`
required by package `foo_1 v0.1.0 (E:\Works\Experimentals\rust-workspace\target\package\foo_1-0.1.0)`
cargo package
将成功运行。但是,一旦你将foo_2
放入foo_1
的依赖项中,你将收到与我相同的错误消息。 - DennyHiufoo_2
是一个库。我将上传工作区结构。 - DennyHiu