問題タブ [reflections]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票する
1 に答える
3921 参照

java - Google リフレクション ライブラリを使用して、実行時にロードされる JAR をスキャンする方法は?

URLClassLoader を使用して実行時に追加される JAR もスキャンするようにリフレクション ライブラリを構成するソリューションはありますか?

今のところ、リフレクションは ClassLoader 内の URL をスキャンするだけです。これは私が現在使用している構成です:

リフレクション ライブラリのドキュメントにヒントが見つかりませんでした。

編集: これは私がjarファイルをロードする方法です:

0 投票する
1 に答える
3785 参照

java - Google Reflections を使用した Annotation の Java スキャン クラス

Google リフレクションを使用して、カスタム アノテーションのクラス内のフィールドをスキャンしようとしています。理由はわかりませんが、結果は常に空のセットになります。

テストクラス

注釈付きクラス

カスタム注釈

他に情報が必要な場合はお知らせください。

0 投票する
1 に答える
1018 参照

java - 指定されたパッケージ外のクラスを含むリフレクション (Dropwizard + Swagger)

次のコードで、リフレクションを使用して、Api アノテーションを持つすべてのクラスを取得しています。

Eclipse からサーバーを実行すると、すべて正常に動作しgetTypesAnnotatedWith、正しいクラスが返されます。しかし、コマンドラインからサーバーを実行すると、そのパッケージ外のクラスが取得されます。Swagger ライブラリのクラス。

ぐるぐる回る代わりに、何が起こっているのかを調べようとしています

前もって感謝します!

0 投票する
1 に答える
936 参照

java - 反射と複数の瓶

2 つの jar ファイルを取得しました。それらを呼び出してdomain.jarscanner.jar. スキャナー jar では、Reflections ライブラリを次のように使用しました。

ここでpackageName、scanner.jar 内のパッケージを指すとすべて正常に動作しますが、からクラスを検索しようとすると、domain.jar常に空のセットが返されます。

私はそれを実行しますjava -cp domain.jar -jar scanner.jar

私が間違っていることは何か分かりますか?Reflectionsの使用から、マルチモジュールプロジェクトをサポートしているため、これが可能になるはずです。

0 投票する
1 に答える
3476 参照

class - Reflections-maven を使用して web-Inf/lib の jar 内のクラスをスキャンすることは可能ですか?

Maven ビルド プロセス中に特定のインターフェイスのサブクラスのリストを作成し、実行時にそれを使用してそれらのクラスをロードする必要があります。webapp pomにreflections-maven(Googleコードリフレクションから)を追加しましたが、mavenビルド中には、Webアプリケーションのクラスのみが含まれ、web-inf/libそのアプリケーションのフォルダーにあるパッケージ化されたjar内のクラスは含まれません。以下は、私が使用した簡単な構成です。プラグインのソース コードを確認したところ、以下をスキャンしているようです: getProject().getBuild().getOutputDirectory().

プロジェクトの依存jarファイルをスキャンするようにプラグインを構成できる方法はありますか?

0 投票する
2 に答える
872 参照

java - Groovy 内で Google-Reflection を使用すると例外が発生しますが、同等の Java コードは機能します

SO で別の回答からいくつかのコードを使用しようとしていますが、コードが Java で実行されている間、Groovy から例外が発生します。

問題のコードは次のとおりです。

例外は、問題のスローラインを取得しているようです:ClasspathHelper.forClassLoader(...)

使用しているかどうかに関係なく発生し@CompileStaticます。また、使用this.getClassLoader()しただけでも同じ問題が発生します。

例外は次のとおりです。

Exception in thread "main" java.lang.NoClassDefFoundError: javax/servlet/ServletContext at java.lang.Class.getDeclaredMethods0(Native Method) at java.lang.Class.privateGetDeclaredMethods(Class.java:2688) at java.lang.Class.getDeclaredMethods(Class.java:1962) at org.codehaus.groovy.reflection.stdclasses.CachedSAMClass.getAbstractMethods(CachedSAMClass.java:91) at org.codehaus.groovy.reflection.stdclasses.CachedSAMClass.getSAMMethod(CachedSAMClass.java:155) at org.codehaus.groovy.reflection.ClassInfo.isSAM(ClassInfo.java:280) at org.codehaus.groovy.reflection.ClassInfo.createCachedClass(ClassInfo.java:270) at org.codehaus.groovy.reflection.ClassInfo.access$400(ClassInfo.java:36) at org.codehaus.groovy.reflection.ClassInfo$LazyCachedClassRef.initValue(ClassInfo.java:441) at org.codehaus.groovy.reflection.ClassInfo$LazyCachedClassRef.initValue(ClassInfo.java:432) at org.codehaus.groovy.util.LazyReference.getLocked(LazyReference.java:46) at org.codehaus.groovy.util.LazyReference.get(LazyReference.java:33) at org.codehaus.groovy.reflection.ClassInfo.getCachedClass(ClassInfo.java:89) at org.codehaus.groovy.reflection.ReflectionCache.getCachedClass(ReflectionCache.java:107) at groovy.lang.MetaClassImpl.(MetaClassImpl.java:163) at groovy.lang.MetaClassImpl.(MetaClassImpl.java:187) at groovy.lang.MetaClassImpl.(MetaClassImpl.java:193) at groovy.lang.MetaClassRegistry$MetaClassCreationHandle.createNormalMetaClass(MetaClassRegistry.java:158) at groovy.lang.MetaClassRegistry$MetaClassCreationHandle.createWithCustomLookup(MetaClassRegistry.java:148) at groovy.lang.MetaClassRegistry$MetaClassCreationHandle.create(MetaClassRegistry.java:131) at org.codehaus.groovy.reflection.ClassInfo.getMetaClassUnderLock(ClassInfo.java:175) at org.codehaus.groovy.reflection.ClassInfo.getMetaClass(ClassInfo.java:192) at org.codehaus.groovy.runtime.metaclass.MetaClassRegistryImpl.getMetaClass(MetaClassRegistryImpl.java:255) at org.codehaus.groovy.runtime.InvokerHelper.getMetaClass(InvokerHelper.java:859) at org.codehaus.groovy.runtime.callsite.CallSiteArray.createCallStaticSite(CallSiteArray.java:72) at org.codehaus.groovy.runtime.callsite.CallSiteArray.createCallSite(CallSiteArray.java:159) at org.codehaus.groovy.runtime.callsite.CallSiteArray.defaultCall(CallSiteArray.java:45) at org.codehaus.groovy.runtime.callsite.AbstractCallSite.call(AbstractCallSite.java:108) at org.codehaus.groovy.runtime.callsite.AbstractCallSite.call(AbstractCallSite.java:116) at net.initech.DeltaCodeGen.main(DeltaCodeGen.groovy:27) at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) at java.lang.reflect.Method.invoke(Method.java:483) at com.intellij.rt.execution.application.AppMain.main(AppMain.java:120) Caused by: java.lang.ClassNotFoundException: javax.servlet.ServletContext at java.net.URLClassLoader$1.run(URLClassLoader.java:372) at java.net.URLClassLoader$1.run(URLClassLoader.java:361) at java.security.AccessController.doPrivileged(Native Method) at java.net.URLClassLoader.findClass(URLClassLoader.java:360) at java.lang.ClassLoader.loadClass(ClassLoader.java:424) at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:308) at java.lang.ClassLoader.loadClass(ClassLoader.java:357) ... 35 more

これを回避するには、POM.xml

しかし、私は持っているべきではありませんし、Java バージョンにはありません。

0 投票する
2 に答える
329 参照

java - Reflections ライブラリは RetentionPolicy を無視しますか

Java アノテーションを理解するために、私は実際に試してみましたが、実行を見るとまだ混乱していますが、疑問はほとんどありませんでした。これが私がやっていることです。注釈を定義する

今、私はコマンドを初期化します

プログラムを実行すると、6行目が表示されますnull。ポリシーが RetentionPolicy.RUNTIME6 行目の場合、正しいコマンドが表示されます。

このプロセスの間、2 行目は、ポリシーに関係なく、正しい Annotated クラスを提供しています。つまり、リフレクションライブラリが無視していることを意味しますか?RetentionPolicy

ほとんどのチュートリアルを読んでも、本当に混乱しています。

私にとって実際の問題は、なぜこの異なる動作なのかということです。ポリシーで注釈を付けた場合RetentionPolicy.CLASS 、実行時に私に与えられるべきではありませんでした。私の理解は間違っていますか、誰かがこれらの両方の理解に関する貴重な情報を共有してください。