(注:このブログはもう更新していません)この日記は私的なものであり所属会社の見解とは無関係です。 GitHub: takahashikzn

[クラウド帳票エンジンDocurain]

他のプロジェクトのリソースファイルをJUnit実行時に参照する

現在、R42フレームワークの開発においては3つのプロジェクトに分割して開発しています。

  1. R42フレームワーク本体(r42fw)
  2. R42コードジェネレータ(r42fw_codegen)
  3. R42フレームワークサンプルアプリケーション(r42fw_sample)

R42フレームワークは残りの2つが依存しているプロジェクトになります。

なお、プロジェクトの依存関係の設定についてはこちらの記事を参照して下さい。


このとき、r42fw_codegenに所属するJUnitを実行した時に、なぜかクラスパス上に存在するはずのr42fw側のリソースファイル(*.propertiesとか)を読みに行かないという現象が発生して困っていました。

これは要するに、r42fw_codegenに所属するJUnitを実行しても、その実行コンテキスト上に
クラスパスr42fw/target/classesが含まれていないということです。


いろいろ調べた結果、先程解決方法が判りました。
解決には、僕にとってこれまで謎の機能だった「ビルドパスのエクスポート」を使います。

ビルドパスのエクスポートとは?

簡単に説明すると「依存プロジェクトのクラスパスを被依存プロジェクトへ自動的に追加する」機能です。


例えば、r42fwのビルドパスがStruts2を含む場合、r42fwに依存しているr42fw_sampleはStruts2を自前でビルドパスに加えなくても、r42fwに依存していると設定した時点で自動的に追加されるということです。

依存プロジェクトのクラスパスを単体テスト時に参照させる方法

まず、ライブラリーに依存プロジェクトのクラスファイル出力先フォルダーを指定します。
指定するには「クラス・フォルダーの追加」ボタンを押してください。この例ではr42fw/target/classesを追加しています。



次に、先程追加したr42fw/target/classesをエクスポートした上で、こいつを一番上に持ってきます。これがポイントです。


この設定を行うことで、r42fw_codegenプロジェクトのJUnitを実行すると、r42fw/target/classesフォルダがクラスパスに含まれるようになります。
従ってこのフォルダ内のリソースファイルも読めるようになります。


なんかもうちょっと素直な設定方法があるような気がしてならないけれども、とりあえず今日はこれで良しとします。