特定のタイプのクラスパス内のすべてのクラスをインスタンス化してマップしようとしています。
ライブラリを使用してスキャンを実行し、Reflections
ロードされたクラスのリストを取得しました。
次に、それらをマッピングするときに、競合をチェックしています (キーは単純なクラス名です)。
JARs
その場合は、例外をスローして、競合するクラスの完全修飾名と、それらがロードされたパス (たとえば、それぞれを見つける可能性 のあるパス) を指摘したいと思います。
メモリからクラスをロードすることもあるJAR
と思いますが、ディスクからロードしていると仮定すると、そのパスを取得する方法はあるのでしょうか...
以下のコード スニペットを参照してください。
if (isConflictingFactoryRegistered(key, myFactory)) {
Class<? extends MyFactory> class1 = factoryMap.get(key).getClass();
Class<? extends MyFactory> class2 = myFactory.getClass();
try {
throw new RuntimeException("Found two conflicting factories for " + key
+ ": 1. " + class1 + " in " + getClass().getResource(class1.getSimpleName()+".class").toURI() +
" 2. " + class2 + " in " + getClass().getResource(class2.getSimpleName()+".class").toURI());
} catch (URISyntaxException e) {
throw new RuntimeException(e);
}
} else {
factoryMap.put(myFactory.getName(), myFactory);
}
このコードはコンパイルできますが、動作しません。getClass().getResource(class1.getSimpleName()+".class") は null を返します。へのパスを取得するにはどうすればよい.class
ですか?