问题标签 [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.
java - 如何使用 Google 反射库扫描在运行时加载的 JAR?
是否有配置反射库的解决方案,以便它还扫描在运行时使用 URLClassLoader 添加的 JAR?
目前,反射只是扫描 ClassLoader 中的 URL。这是我现在使用的配置:
我在反射库的文档中找不到任何提示。
编辑: 这就是我加载 jar 文件的方式:
java - 使用 Google 反射进行注释的 Java 扫描类
我正在尝试使用谷歌反射扫描类中的字段以获取我的自定义注释。我不知道为什么,但结果总是一个空集。
测试班
注释类
自定义注释
如果需要任何其他信息,请告诉我。
java - 包括给定包之外的类的反射(Dropwizard + Swagger)
我正在使用反射来获取所有具有 Api 注释的类,其中包含以下代码。
如果我从 Eclipse 运行服务器,一切正常并getTypesAnnotatedWith
返回正确的类。但是,如果我从命令行运行服务器,我将获得该包之外的类。来自 Swagger 库的类。
我试图找出发生了什么而不是四处走动
提前致谢!
java - 如何仅获得具有反射的可实例化类
我正在使用反射包来获取一组实现某个接口的类。该集合将用作可能的命令行选项列表。我的问题是我只想获取可实例化的类,但现在从以下代码中获取可实例化和不可实例化的类(例如抽象类):
有没有办法过滤返回的集合getSubTypesOf
以过滤掉抽象类?
java - 反射和多个罐子
我有两个 jar 文件,让我们调用它们domain.jar
和scanner.jar
. 在扫描仪 jar 中,我使用了 Reflections 库,如下所示:
如果我指向packageName
scanner.jar中的包,一切正常,但如果我尝试从中查找类,domain.jar
它总是返回空集。
我运行它java -cp domain.jar -jar scanner.jar
知道我做错了什么吗?从反射使用示例中,它支持多模块项目,所以这应该是可能的。
java - 来自 Maven Mojo 的思考
我想使用 Google Reflections 从我的 Maven 插件编译的项目中扫描类。但是插件默认看不到项目的编译类。从Maven 3 文档我读到:
需要从项目的 compile/runtime/test 类路径加载类的插件需要结合 mojo 注解 @requiresDependencyResolution 创建自定义 URLClassLoader。
这至少可以说有点模糊。基本上我需要一个对加载已编译项目类的类加载器的引用。我怎么得到它?
编辑:
好的,@Mojo
注释有requiresDependencyResolution
参数,所以这很简单,但仍然需要正确的方法来构建类加载器。
class - 是否可以使用反射-maven 扫描 web-Inf/lib 中 jar 内的类?
我需要在 Maven 构建过程中为特定接口创建一个子类列表,然后在运行时使用它来加载这些类。我在我的 webapp pom 中添加了反射-maven(来自谷歌代码反射),但是在 maven 构建期间,它只包括来自 web 应用程序的类,而不包括该应用程序web-inf/lib
文件夹中的打包 jar 中的类。以下是我使用的直接配置。我查看了插件源代码,它似乎扫描了以下内容:getProject().getBuild().getOutputDirectory()
.
无论如何我可以配置插件来扫描项目的依赖jar文件吗?
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 版本中。
java - Reflections 库是否忽略 RetentionPolicy
为了理解 Java 注释,我尝试了一些操作并得到了一些疑问,即使查看执行我仍然感到困惑。这就是我正在做的事情。定义注解
现在我初始化命令
当我运行程序第 6 行显示null
。当策略为 RetentionPolicy.RUNTIME
第 6 行时,显示正确的命令。
在此过程中,第 2 行仍然给我正确的 Annotated 类,而不管政策如何。那么这是否意味着反射库忽略了RetentionPolicy
即使阅读了大多数教程,我也很困惑。
我的问题实际上是,为什么这是不同的行为?当用策略注释时RetentionPolicy.CLASS
它不应该在运行时给我。我的理解是否错误,或者任何人都可以分享对这两者的理解的宝贵意见。
java - 为什么 Reflections.getFieldsAnnotatedWith() 不返回任何字段?
我遇到了Reflections的问题。我正在尝试Set
使用方法获取一个字段,Reflections#getFieldsAnnotatedWith
但是当我运行单元测试时,它什么也不返回,有人能告诉我为什么吗?(我正在使用 IntelliJ IDE)
这是我正在使用的课程,它非常基础。
测试失败并显示以下消息: