1

Uber-jar として提供される Reflections 0.9.8 ライブラリを使用しようとしています。その JAR ("reflections-0.9.8-uberjar") をプロジェクトのビルド パスに追加すると、Eclipse はそのクラス タイプ (Reflection、ClasspathHelper など) を見つけられません。

単一の「reflections-0.9.8.jar」(uberのものではない)を抽出してビルドパスに追加すると、コンパイル時にすべて正常に動作しますが、プロジェクトを実行するとNoClassDefFoundErrorが発生します(これは私が依存関係の欠如が原因であることは間違いありません)。

また、uber-jar 内にすべての .jar を追加しようとしましたが、それでも NoClassDefFoundError が発生します。

uberjar として配布されているこのライブラリを使用するには、どうすればよいですか?

編集: それが役立つ場合、これはリフレクションを呼び出したいメソッドです(リフレクションを使用してパッケージ内のすべてのクラスを見つけることができますか?から取得したスニペットです):

private static Set<Class<?>> getAllClassesInPackage(String pckg){
    List<ClassLoader> classLoadersList = new LinkedList<ClassLoader>();
    classLoadersList.add(ClasspathHelper.contextClassLoader());
    classLoadersList.add(ClasspathHelper.staticClassLoader());

    Reflections reflections = new Reflections(new ConfigurationBuilder()
        .setScanners(new SubTypesScanner(false), new ResourcesScanner())
        .setUrls(ClasspathHelper.forClassLoader(classLoadersList.toArray(new ClassLoader[0])))
        .filterInputsBy(new FilterBuilder().include(FilterBuilder.prefix(pckg))));

    return reflections.getSubTypesOf(Object.class);

}
4

1 に答える 1

0

私はあなたと同じ問題、メッセージ NoClassDefFoundError を抱えていました。しばらく検索すると、reflections-0.9.8.jar 内に存在するような他の jar 内に jar があると、その問題が発生することがわかりました。それでも、あなたのように抽出すると、同じ問題が再び発生します。これは Reflection パッケージのコンパイル バージョン (バージョン 1.5 でコンパイル) が原因である可能性があり、私のプロジェクトは 1.6 でコンパイルされていると推測しました。

Reflections パッケージの使用をあきらめることに決め、パッケージ内のクラスを取得するアドホック ソリューションを投稿しました。

リフレクションを使用して、パッケージ内のすべてのクラスを見つけることができますか?

お役に立てば幸いです。

于 2013-12-03T18:01:48.857 に答える