私の現在のプロジェクトでは、いくつかの構成データをパッケージ注釈に保存し、いくつかの CDI プロデューサーからアクセスしたいと考えています。注釈が現在のパッケージで見つからない場合、プロデューサーはパッケージ階層の上方でそれを検索します。
ここまでは順調ですね。残念ながらPackage.getPackage("my.package")
、クラスまたはインターフェースのいずれかに最初にアクセスした後にのみ、既存のパッケージにアクセスできるようです。
次の例は、この動作を示しています。
クラスインパッケージa.b
package a.b;
public class ClassInMitte {
}
パッケージにアクセスするプログラム例oben.mitte
package other;
public class Refl {
public static void main(String[] args)
{
Package viaName = Package.getPackage("a.b");
System.out.println(viaName.getName());
System.out.println(viaName.hashCode());
}
}
実行Refl
すると、NullPointerException
. しかし、最初のステートメントとして追加するnew ClassInMitte()
と、パッケージ情報にアクセスできます。どういうわけか、パッケージ情報自体にアクセスする前に、パッケージのコンテンツにアクセスする必要があります。そうしないと、クラスローダーは開始時にクラスパス全体をスキャンする必要があるため、これは理にかなっています。
しかし、以前にパッケージのコンテンツにアクセスせずにパッケージ情報にアクセスする簡単な方法はありますか? リフレクションのようなフレームワークを使用できることはわかっていますが、「軽量」ソリューションが私の好みのソリューションです。