背景
小さなアプリケーションを複数作成し、それぞれGitリポジトリ上は別々に管理しています。例えば、次の4つのJavaFXアプリケーションを作成し、それぞれを独立したGitリポジトリに置いて管理しているものとします。
AnalogClockGadget CalendarGadget EarthGadget ImageGadget
それぞれがまったく独立(疎)である間は、必要とするアプリケーションのリポジトリをクローンして開発作業をしています。クローンしたディレクトリをNetBeansで開けばすぐにビルド・実行ができます。
ここで、4つのアプリケーション間で共通の実装が増えてきたので、新たにNetBeansでライブラリプロジェクト GadgetSupport を作成し、各アプリケーションはこのGadgetSupportに依存するようにします。
すると、例えばImageGadgetだけをクローンしてビルドしようとしても依存するGadgetSupportプロジェクトが所定の場所にないためエラーとなってしまいます。
NetBeansのプロジェクト設定で、別なプロジェクトを依存関係に追加した場合、nbproject/project.properties ファイルに相対パスで依存するライブラリプロジェクトのパスが記述されます。
そのため、アプリケーションのクローンに加えて、依存するライブラリプロジェクトをプロジェクト設定に従った相対パスへクローンして配置する必要があります。なかなかに手間がかかります。
解決方法の模索
CalendarGadget のリポジトリにサブモジュールとしてGadgetSupport を追加
最近は、GitクライアントにAtlassianのSourceTreeを使っています。SourceTreeからは、[リポジトリ]メニュー > [サブモジュールを追加]を選択し、[元のパス/URL]欄に、GadgetSupportのリポジトリのURLを記載、ローカル相対パスはデフォルトでリポジトリ名が入るのでそのまま使います。
すると、CalendarGadgetリポジトリ上にGadgetSupportディレクトリが作られます。
CalendarGadget +-- nbproject +-- src +-- GadgetSupport
CalendarGadgetをNetBeansで開き、プロジェクトプロパティでライブラリの追加でGadgetSupportを選択して依存関係を付けます。以後は、CalendarGadgetをビルドするとGadgetSupportもビルドされるようになります。
Gitリポジトリとしては、CalenarGadgetをクローンするとGadgetSupportも含まれるので、従来同様ビルド・実行できています。
SourceTreeでCalendarGadgetリポジトリを開いたときに左側ペインのサブモジュールの下にGadgetSupportが追加されます。これをダブルクリックすると、GadgetSupportのリポジトリ内容が表示されます。言わばシンボリックリンクのような状況でしょうか。
SourceTreeメモ
Windows OS用のSourceTreeについて、気になる点
- 起動時、アイコンクリックから画面表示まで時間がかかっているため、起動のためのアイコンダブルクリックが有効だったかどうか不安になる
- 全体的にもったりした動き
- 時々、キー入力が受け付けられなくなりちょっと待つとキータイプした文字が入力される現象あり