当前位置: 首页 > 面试题库 >

可靠地找到使用URLClassLoader加载的类的注释

董权
2023-03-14
问题内容

我有一个代码生成器,它使用URLClassLoader在指定的路径上加载类,扫描它们以查找批注,然后在字段/方法上使用Reflection,生成DTO。

测试应用中,效果很好。

当我将其放入Maven
MOJO中时,突然失去了在类上看到javax.persistence.Entity批注的能力。它加载它们,可以看到所有字段,但是Entity注释不再可见。

我假设这与Classpath问题有关-
是吗?测试应用程序(插件本身中的main()函数)或MOJO都不是扫描类来自的项目的一部分。但是,一个有效,而另一个无效。

我有一些调试代码,当检查它们时,会打印出该类上的所有注释,在非运行版本中,它实际上找不到任何注释。

有什么想法可以调试/解决问题吗?


问题答案:

事实证明这个问题非常简单,尽管我不确定为什么在一种情况下效果很好,而在另一种情况下效果不好。

我的URLClassLoader创建未指定父类加载器。因此,我认为它找不到任何东西。我一经使用

loader = new URLClassLoader(classUrls, Thread.currentThread().getContextClassLoader());

对于类加载器,一切都开始正常工作。对于类加载器的来龙去脉,我一无所知,所以这并不明显。特别是由于我遵循的示例也未指定父级。



 类似资料:
  • 问题内容: 我在玩反射,我想做点东西来加载一个类并打印该类中所有字段的名称。我制作了一个小型的hello world类型的类来检查一些东西: 基于以上所述,我得出两个结论: 它存在于/home/kent/eclipsews/SmallExample/bin/IndependentClass.class 有用!(因此它必须是可以由类加载器加载的正确的.class文件) 然后使用反射的代码:(标记导致

  • 我收到了simmilar帖子,但没有工作 我有android studio 2.3.1 gradle版本2.3.1 AppCompat-V7:25.3.1 分级(项目)

  • 问题内容: 我正在开发一个Web项目,最近安装了Postgres 9.1.1。 PostgreSQL服务器已启动并正在运行。我可以像往常一样通过psql连接,并且从我从8.5创建的数据库转储中加载并正确保存了所有内容。 因此,我还在这里下载了9.1 postgres版本的JDBC4驱动程序:http ://jdbc.postgresql.org/download/postgresql- jdbc-

  • 问题内容: 以下是一些代码片段,这些片段指示我目前正在尝试什么,但是它不可靠。原则上,我认为因为您只能注册一次协议处理程序,偶尔其他库可能会先这样做。 xml-catalog.xml包含: 显然-xsd文件位于类路径中的正确位置。 问题答案: 解析器使用以下最小代码集来正常运行: 您可以选择将其指定为JVM参数: 该班是实现如下: 在请求资源时,使用正斜杠()很重要,这已由以下 堆栈溢出 问题回答

  • SNMPAgent。JAVA snmp代理类使用的托管对象:MOCreator。JAVA SNMPManager。JAVA TestSNMPAgent.java 这就是我编译代码的方式(我已经有snmp4j和api的代理. jar文件) javac-d.-cp"snmp4j-2.5.0.jar:snmp4j-agent-2.5.0.jar"*. java 这就是我执行代码的方式 Java-cp"s

  • 好的,基本上,我尝试使用这里描述的方法JarFileLoader来加载一个jar,其中包含一个类,该类的使用方式与类路径上的相同(类名将是动态的,因此我们可以添加任何jar任何类和程序将通过解析文本文件加载它,在主线中)。 问题是当我调试和检查URLClassLoader对象时 行: getResource()在参数中找不到类名。 有人已经尝试过用这种方式加载jar文件了吗? 谢谢。 加载器: 主