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


23

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

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

ライブラリをコンパイルする前にインストールする必要はありません。

回答:


10

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


1
サブモジュールは、共通およびGitの依存関係管理のかなり弱い実装です。少なくとも、Gitのサブツリーには、多くの方の繰り返しです
レイジーバジャー

4
-1リンクの詳細を回答に含めてください。そうしないと、現在のように、リンクが消えたときに回答が役に立たなくなります。残念ながら、私はdownvoteに担当者を持って、まだありません
Precastic

@Precastic:リンクテキストをGoogleで検索すると、すぐに新しいページに移動します。それがどれほど有益なものであるかはわかりません。
ブライアンエイジ14年

1
stackoverflow.com/help/how-to-answerをお読みください-具体的には「リンクのコンテキストを提供する」というセクション(引用:「重要なリンクの最も関連性の高い部分を常に引用してください。 。 ")
Precastic 14年

17

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

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

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

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

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

要するに、可能であれば、スタンドアロンの作業パッケージ全体を提供します。これは、ユーザーに最も便利な機能を提供します。


1
@tdammers:Linuxシステムにソフトウェアをインストールする場合、パッケージマネージャーがすべての作業を行います。しかし、それにはインターネット接続が必要であり、パッケージは特定の形式である必要があり、自動化ツールがこれを支援できると明示的に述べました。たとえば、このようなシステムを.NETオープンソースツールに使用することはできません。NHibernateやCastle Windsorなどのsourceforgeツールを見ると、すべての依存関係がバイナリとして含まれていることがわかります。そして、それが唯一の合理的なことです。
ファルコン

1
@tdammers:偶然にも、今日ここでLinuxマシンにOpenOffice SDKをインストールする必要があります。SDKはパッケージマネージャー経由ではインストールできないため、WebサイトからRPMを取得しました。「rpm --install」を実行しようとしたときに最初に表示されるメッセージは何だと思いますか?エラー:依存関係の失敗:ooobasis3.3-sdk-3.3.0-9567.x86_64にはooobasis3.3-core01が必要です - ああ
ファルコン

2
@tdammers:その通りですが、セットアップとインストールだけが簡単な場合は、この冗長性が必要です。そして、依存関係の地獄を見たいときは、/ usr / libディレクトリを見てください。冗長性、サブバージョン、すべてのプログラムがどのライブラリを使用するかさえわかりません。もちろん、パッケージマネージャーに処理させてください!しかし、私が言及したオープンオフィスの場合のように、パッケージマネージャーがそれを処理できない場合はどうでしょう。それは基本的にあなたがねじ込まれていて、何かをインストールするのに苦労することを意味します。
ファルコン

2
@tdammers:そして、これと私の経験について考えると、パッケージマネージャー経由でインストールした場合でも、依存関係が失敗したか、いくつかのプログラムが実行を拒否したからといって、このディレクトリにシンボリックリンクを作成しなければならなかった回数さえ数えられません。たぶん状況は良くなったかもしれませんが、多くの場合、いくつかの機能を実行するのはまだ大変な作業です。アプリケーションとの依存関係を出荷しただけで回避できた問題。面倒を避けるために、数MBの追加スペースを喜んで支払います。
ファルコン

2
@tdammers:特定のLinuxシステムに特定のプログラムをインストールする方法に関するWeb上の無数のチュートリアルは、この問題の目撃者です。
ファルコン

3

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

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


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


1

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

これは、(SCM法のための任意の使用可能なことで)リポジトリで参照することができる場合、この依存性は不可欠な部分を別々に解決することができる製品(ソース依存性)のではなく、バイナリ依存性、

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

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


0

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

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

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

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

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.