私は依存関係(クッキーユーティリティ)があり、依存関係のあるプロジェクトがiron>= 0.3, <= 0.4
です。貨物依存の統合
私のプロジェクトは、鉄道0.3
に依存しています(最新の鉄に更新されていないrouter
ミドルウェアを使用できます)。
私のプロジェクトをコンパイルしようとすると、cookieユーティリティは0.4
バージョンの鉄をプルします。異なるバージョンの鉄が使用されているため、エラーが発生します。
しかし、私が行うことができます。
cargo update -p <cookie utility>
(通常は)私が使用していたものと一致した鉄にそのパッケージの依存関係を変更し、鉄0.4
に余分な依存関係を除去します。 (奇妙なことに、更新する前にそのコマンドを数回実行しなければならないことがあります。)
明らかに依存関係の依存バージョンを指定することはできません:Set specific version of the dependency of a project's dependency in Cargo.toml or Cargo.lock
貨物が私が鉄の単一のバージョンを使用したいと思うのであればいいですが、なぜそれができないのか理解しています。しかし、私はなぜcargo update -p <package>
が実際に動作するのか混乱しています。パッケージの依存関係を更新することは直感的ではないようです。 (と私が欲しいのバージョンは、そのライブラリのサポートされるバージョンの範囲内にあるときのみの場合)どのように私は、依存関係の依存関係のバージョンを指定することができます。
私は私の最初の本当の問題があると思いますか?私は、上にリンクされた質問で提案された解決策は理想的ではないと思います。 Cargoがこれをうまくサポートできるようになると良いと思うので、ライブラリは機能が許す限り依存関係のバージョン範囲を開いたままにすることができます。
同時に私は自分の望むことをするような "トリック"を見つけました(cargo update -p <pkg>
)。私は非常に見苦しくはありませんが、この動作は明白な場所に記述されていないようです。私の2番目の質問は、これは依存関係を合体させる有効な方法ですか?これについてもっと知ることができる場所はありますか?
そして再現手順:
- 新しいプロジェクトを作成します。
cargo new --bin ironapp
を。cd ironapp
。 - Cookieの依存関係を作成します。
cargo new cookie_util
。 cookie_util/Cargo.toml
1つの依存関係を追加してください:iron = ">= 0.3, <= 0.4"
。Cargo.toml
には、iron = "0.3.0"
とcookie_util = { path = "cookie_util"}
の2つの依存関係を追加します。cargo build
。Cargo.lock
に鉄の2つのバージョンが必要であることを確認してください。cargo update -p cookie_util
を1から4(またはそれ以上)の間で実行してください。最終的にiron 0.4.0
への依存関係は削除されます。
これをrustc-1.10.0/cargo-0.11.0でテストしました。ステップ1の開始時にtarget
とCargo.lock
が両方とも存在しないことを確認しました。
これは[ここ](https://github.com/rust-lang/cargo/issues)の問題を作成する価値があります。 – squiguy
@squiguyからのコメントが2番目です。問題を作成します。ただし、問題を提出する際に** [MCVE] **を提供するようにしてください。そしてここ。 – Shepmaster
コメントありがとうございます。私は少し質問を明確にしようとしました –