web-dev-qa-db-ja.com

オープンソースプロジェクトで外部依存関係をどのように処理しますか?

オープンソースプロジェクトを作成し、Google CodeまたはGitHubを使用していて、Luaのようなライブラリを使用したい場合、どうすればよいですか?

  • 依存関係をリポジトリに含める必要がありますか?
  • 依存関係は、プロジェクトの他の部分と同じビルドスクリプト内からビルドする必要がありますか、それとも別のビルドスクリプトからビルドする必要がありますか?

ライブラリはコンパイル前にインストールする必要がないことを考えると。

23
rightfold

Gitのサブモジュールに関するドキュメント ;を一読することを強くお勧めします。すべてのソースがGitを使用していると想定して、この問題に対処します。そうでない場合は、統合のためにgitリポジトリをいつでも設定できます。努力はささいであり、見返りは大きいです。

10
Bryan Agee

依存関係をリポジトリに含める必要がありますか?

依存関係は常に含める必要があると思いますそれらを含めることが使用条件に違反しない限り、リポジトリ内にあります。ビルドを作成する前に、適切な依存関係の適切なバージョンを手動で見つける必要があるほど、煩わしいものはほとんどありません。もちろん、これを行う自動化ツールがあれば簡単です。適切な依存関係を見つけてダウンロードできますが、現時点でWebに接続していない場合、サーバーがダウンしている場合、または依存関係のプロジェクトがある場合はどうでしょうか。完全に中止され、オフラインになりましたか?可能であれば、常に依存関係を含めます。

依存関係は、プロジェクトの他の部分と同じビルドスクリプト内からビルドする必要がありますか、それとも別のビルドスクリプトからビルドする必要がありますか?

ソースからコンパイルする正当な理由がない限り、プリコンパイルされたバージョンを使用してください。

そして、なぜビルドスクリプトにオプションを提供しないのですか?依存関係もコンパイルするかどうかを選択する簡単なスイッチ。ユーザーが依存関係もコンパイルすることを選択した場合は、製品のビルドスクリプトから独自のビルドスクリプトを呼び出すだけです。したがって、ユーザーは依存関係のビルドスクリプトを手動で呼び出すか、すべてのフルビルドを作成することを選択できます。しかし、ソースからコンパイルする正当な理由がない限り、依存関係をバイナリとして提供します。オープンソースの世界では、いくつかのライセンスでは製品とともにソースを配布する必要がありますが、それはそれらをプリコンパイルできないことを意味しません。

簡単に言えば:可能であれば、スタンドアロンの作業パッケージ全体を提供します。これは、ユーザーにとって最も便利です。

17
Falcon

これはユースケースに当てはまる場合と当てはまらない場合がありますが、私たちが実際に行っているのは、各ブランチに「参照」フォルダーを含めることです。ここにサードパーティのDLLを配置します。これにより、ソースコントロール内の比較的変化しないバイナリの多くの重複が発生しますが、ストレージは安価であり、いつでも各ブランチとタグが期待する依存関係(およびバージョン!)を正確に持っています。

依存関係を自分でプリコンパイルし、コンパイルしたバイナリをそのフォルダーに移動します。独自の社内共有ライブラリも同様に扱われます。このようにして、同じ手法が、コンパイル済みのプロプライエタリライブラリ、オープンソースライブラリ、および社内ライブラリに対して機能します。


私がもう一度読んだ今、実際にあなたの質問に答える限り、同じことを行い、プロジェクトがLuaのプリコンパイルされた1.3.5バージョンを使用していることを述べてください。

3
Bryan Boettcher

依存関係をリポジトリに含める必要がありますか?

それはリポジトリで参照できます(SCMメソッドで使用可能な任意の方法で)、ifこの依存関係は積分部分製品の(ソース依存関係)であり、バイナリ依存関係ではありません。個別に解決する

依存関係は、プロジェクトの他の部分と同じビルドスクリプト内からビルドする必要がありますか、それとも別のビルドスクリプトからビルドする必要がありますか?

まったく関係ありません。要件(速度/透明性/管理性など)に応じて、任意の方法を選択できます

1
Lazy Badger

Eclipseショップであるため、ビルド/アセンブル/デプロイプロセスの管理に Buckminster を使用し始めました。

私たちの最初の段階は、既存の依存ライブラリをすべて引き出し、バックミンスターに正しいライブラリの具体化を任せることです。これにより、はるかに迅速かつ小規模な展開が可能になります。

次のステップでは、モノリシックsvnリポジトリを一連のモジュール式gitリポジトリに移動します。

Buckminsterがgitサブモジュール(またはMercurialのサブリポジトリ)とどの程度うまく統合できるかはわかりませんが、特定のコンポーネントに使用されるVCSに関してbuckminsterが認識されないのは素晴らしいことです。

0
Mark Booth