2016-07-26 12 views
5

私はアプリケーションを書いており、いくつかのパッケージBをインポートしています。このパッケージにはvendorディレクトリがあり、このディレクトリにはパッケージCが含まれています。私はまたそのパッケージCを私のアプリで直接使用したいと思います。Goパッケージの入れ子になった "ベンダー"ディレクトリを扱うには?

私はglideパッケージマネージャを使用することに決めました。 BCの両方を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を行い、これで終わる:私はtoyvendorディレクトリを入れ子にしているしたくない

. 
├── 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 

+0

「グライド」は現在使用していませんが、最新のバージョンをお持ちですか?ドキュメントを見てみると、このGlideが原因で、依存関係ツリーが1つのトップレベルのベンダー/ディレクトリに統合されていることがわかります。 – JimB

+0

JimBが述べたように、私が使ったほとんどの現在のベンダーツールは、 2つの異なる一意のパスからインポートされた同じパッケージは、実際には2つの異なる一意のパッケージと見なされるため、実際には必要です。私は 'govendor'がデフォルトでそれをしていることを知っています。 – Kaedys

+0

@Kaedys +1 for govendor。私はかなりのプロジェクトでそれを使ってきました。 – tier1

答えて

2

私は(また、あなたのPR https://github.com/orloffm/flat/pull/1を送った)次の変更を行うことによって、あなたのflatプログラムをインストールして実行することができました:

1)「github.com/orloffm/toy」をインポートする必要があるためflat.go

package: github.com/orloffm/flat 
import: 
- package: github.com/orloffm/cat 
- package: github.com/orloffm/toy 

3)実行glide install --strip-vcs --strip-vendor(または当量:それ以外の場合は

2をコンパイルしません)「猫」との依存関係などの「おもちゃ」の両方のライブラリをリストglide.yamlファイルを追加 - new(toy.RubberToy)のalent shortcut glide install -s -v)を使ってパッケージをインストールし、入れ子になったvendor/ディレクトリを削除します(私は、グライドバージョン0.11.0-devをgo get -u github.com/Masterminds/glideと一緒にインストールしています。 glide install --help--strip-vendorオプションを示しています)。

4)GOBIN = $ PWD

Cat pushes the toy. 
The toy makes a very loud noise. 

を生成./flat & &は、私は最高のあなたのライブラリvendorディレクトリを含めるようにないことだと思うインストール行く - これは物事を台無しにし、図書館利用者の生活をより困難にしている(例えば、glideの追加オプションを使うことを覚えておく必要がある)。これらのライブラリの "クライアント"(package mainパッケージ)は、すべての依存関係(推移的なものを含む)をベンダに渡すか、またはglide.yamlのような構成で指定して、それらを適切にフェッチしてインストールさせます。

+0

それは物事を並べ替え、非常にありがとうございます。他のすべてのツールと比べると少し混乱しました。 –

関連する問題