私はアプリケーションを書いており、いくつかのパッケージB
をインポートしています。このパッケージにはvendor
ディレクトリがあり、このディレクトリにはパッケージC
が含まれています。私はまたそのパッケージC
を私のアプリで直接使用したいと思います。Goパッケージの入れ子になった "ベンダー"ディレクトリを扱うには?
私はglide
パッケージマネージャを使用することに決めました。 B
とC
の両方をmyapp/vendor
ディレクトリにダウンロードしますが、内部にはmyapp/vendor/B/vendor/C
が格納されます。だから私は私のアプリケーションをビルドすると、それはCの2つの異なるバージョン(myapp/vendor/C
も)で構築されます。
これを回避するにはどうすればよいですか?
1)いずれか、それを処理するパッケージマネージャはありますか? govend
はその--prune
引数であるようですが、これらのC
パッケージのバージョンは尊重しません。
2)またはglide
はネストされたvendor
ディレクトリを正しく処理する方法を教えてください。
編集
私の例では、https://github.com/orloffm/flat
です。それはcat
と間接的に - toy
パッケージを使用します。 cat
は、より古いバージョンのtoy
が販売され、リポジトリにコミットされています。私はglide create && glide install
を行い、これで終わる:私はtoy
でvendor
ディレクトリを入れ子にしているしたくない
.
├── flat.go
├── glide.lock
├── glide.yaml
└── vendor
└── github.com
└── orloffm
├── cat
│ ├── cat.go
│ ├── vendor
│ │ └── github.com
│ │ └── orloffm
│ │ └── toy
│ │ └── toy.go
│ └── vendor.yml
└── toy
└── toy.go
。
「グライド」は現在使用していませんが、最新のバージョンをお持ちですか?ドキュメントを見てみると、このGlideが原因で、依存関係ツリーが1つのトップレベルのベンダー/ディレクトリに統合されていることがわかります。 – JimB
JimBが述べたように、私が使ったほとんどの現在のベンダーツールは、 2つの異なる一意のパスからインポートされた同じパッケージは、実際には2つの異なる一意のパッケージと見なされるため、実際には必要です。私は 'govendor'がデフォルトでそれをしていることを知っています。 – Kaedys
@Kaedys +1 for govendor。私はかなりのプロジェクトでそれを使ってきました。 – tier1