以下のようなクラスを作ってみました。
例えば、META-INF/classes.lstというファイルに、
以下のようにクラス名をリストアップ
しておきます。
仕掛け自体は非常に単純なのですが、
これで、Jarファイルをクラスパスに通すだけで、そのJarのMETA-INF/classes.lst
に書いてあるクラスを取得できるようになります。
LiQ Containerと組み合わせるとプラグインぽい仕組みを簡単に作ることが
できて便利そうなので、LiQ Container本体にこっそり入れるかどうか
考え中です。
例えば、META-INF/classes.lstというファイルに、
以下のようにクラス名をリストアップ
しておきます。
---- jp.liq.sample.AImpl1 jp.liq.sample.AImpl2 java.lang.String ----以下のようなコードで上記のクラスが取得できます。
---- ClassDiscoverer discover = new ClassDiscoverer(); discover.addClassList("META-INF/classes.lst"); int cnt = 0; for(Class> c: discover.classes().isA(A.class)) { assertTrue(A.class.isAssignableFrom(c)); cnt++; } assertEquals(2, cnt); ----ここではインタフェース「A」のサブクラスのみを取得しています。
仕掛け自体は非常に単純なのですが、
これで、Jarファイルをクラスパスに通すだけで、そのJarのMETA-INF/classes.lst
に書いてあるクラスを取得できるようになります。
LiQ Containerと組み合わせるとプラグインぽい仕組みを簡単に作ることが
できて便利そうなので、LiQ Container本体にこっそり入れるかどうか
考え中です。