工作区内包名与bin名一致时,无法依赖lib组件的问题咨询
问题原因及解决办法
你遇到的问题核心是混淆了Cargo里「包名(package name)」和「库crate名」的区别,不是场景不被允许,是配置和依赖写法没匹配上。
关键规则
Cargo识别依赖时,是根据目标包[package]段的name字段来匹配的,而非[lib]里指定的name。你的batch_jobs包,package名是batch_jobs,所以依赖只能这么写:
batch_jobs = { path = "../batch_jobs" }
那为什么依赖后访问不到库代码?因为你给库显式指定了独立的crate名batch_jobs_lib——默认情况下如果不写[lib]的name,库的crate名会和包名一致,但你改了之后,在依赖这个包的crate里,必须通过库的crate名来引用代码:
use batch_jobs_lib; // 而非 use batch_jobs;
为什么改[[bin]]名字就正常?
当bin名和包名相同时,本身不会直接引发问题,但你之前可能误以为依赖的crate名就是包名,所以用use batch_jobs;找不到代码。改了bin名后,你可能无意识中用对了库的crate名,所以恢复正常。
优化建议
如果想让写法更直观,可以二选一:
- 删掉
[lib]里的name字段,让库的crate名和包名batch_jobs一致,依赖后直接用use batch_jobs;就能访问库代码 - 保持库的
name为batch_jobs_lib,但记住依赖时用包名batch_jobs引入,再用库的crate名引用代码
内容的提问来源于stack exchange,提问作者J. Doe
相关产品推荐
相关产品推荐

