反射 - Java 8 - 无效的常量类型

2023-11-30

我有一个问题反思图书馆。 我正在尝试动态加载实现特定接口的所有类。 只要我不在这些类中使用 lambda 表达式(java 8),一切都会正常工作(所有类都已加载)。 我尝试升级lib版本但效果是一样的(java.io.IOException: invalid constant type: 18).

依赖和内置pom.xml:

<dependency>
    <groupId>org.reflections</groupId>
    <artifactId>reflections</artifactId>
    <version>0.9.10</version>
    <exclusions>
        <exclusion>
            <groupId>javassist</groupId>
            <artifactId>javassist</artifactId>
        </exclusion>
    </exclusions>
</dependency>

<dependency>
    <groupId>org.javassist</groupId>
    <artifactId>javassist</artifactId>
    <version>3.19.0-GA</version>
</dependency>

<build>
    <plugins>
        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-compiler-plugin</artifactId>
            <configuration>
                <source>1.8</source>
                <target>1.8</target>
            </configuration>
        </plugin>
    </plugins>
</build>

不排除是同样的效果。

Code:

URL jarUrl = jarFile.toURI().toURL();
URLClassLoader child = new URLClassLoader(new URL[]{jarUrl}, this.getClass().getClassLoader());
ConfigurationBuilder builder = new ConfigurationBuilder()
        .addClassLoader(child)
        .addUrls(jarUrl)
        .setScanners(new SubTypesScanner());
Reflections r = new Reflections(builder);
return r.getSubTypesOf(cls);

如何使用 lambda 表达式加载类?

P.S 对不起英语:)


如果你看这张桌子,你会看到“constant type: 18”指的是CONSTANT_InvokeDynamic标签值为的属性18 (0x12).

因此,您使用的库具有与 Java 8 不兼容的类解析器。实际上,这个类解析器甚至不兼容 Java 7,因为这个常量值是从 Java 7 开始指定的。它只是摆脱了这一点,因为普通的 Java 代码在 Java 7 中不使用此功能。但是当与不同的代码生成的代码交互时如果使用 Java 7 的编程语言,它甚至可能会失败。

There’s Reflections 错误跟踪器中的一项描述你的问题。在底部,您会发现通知:

通过此修复:https://issues.jboss.org/browse/JASSIST-174javassist 获得了对此常量的支持。因此,对于 3.18.2-GA,不会发生此错误。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

反射 - Java 8 - 无效的常量类型 的相关文章

随机推荐

  • 如何获取 SVG 折线元素的长度?

    这是我的折线 我想知道它的长度 div class svg 1 div
  • 我需要哪些 IP 地址才能允许防火墙访问 geocoder.api.here.com?

    我们想使用heremaps geocoder api 目前 对此处地图的调用已被我们的本地防火墙阻止 我们的管理员告诉我 无法将 URL 添加到防火墙规则 geocoder api here com 他们需要 IP 地址 所以问题是 geo
  • 无法将mysql中的商标符号显示为html

    我是 php mySQL 的初学者 目前面临在 html 上显示 等符号的问题 该符号存储在一个表中 从 phpmyadmin 查看时可以正确显示 但是当我使用 php 检索表内容时 它不会显示该符号 而是显示带有 的菱形符号 在里面 我已
  • 从多个复选框行收集 $_POST

    我有一个包含多行复选框的表单 每个复选框都有一个特定的 id 使用foreach loop 你如何抓住 POST类似的信息 我觉得某种程度上是这样的 POST 就像一个子数组 但我不知道如何设置它 foreach stakholderArr
  • Android 自定义图库禁用滚动

    我正在尝试创建一个自定义图库来禁用滚动 我从中得到以下信息 如何禁用图库视图滚动 public class MyGallery extends Gallery public MyGallery Context context Attribu
  • 如何将 double[][] 传递到方法调用中?

    您好 我正在尝试初始化一个具有双精度值的对象 格式为 double filter 3 3 但我不断收到以下错误 无法在赋值中将 double 3 3 转换为 double 在我的标题中我有这个 interface filter NSObje
  • 使用 ProcessBuilder 通过命令行选项执行 python 脚本

    为了从Java执行python脚本 有几个命令行参数 我尝试使用以下java代码 String command script py run arg1 val1 arg2 val2 arg3 val 31 val 32 ProcessBuil
  • 如何将 JavaScript 中的数组变量传递给接受 List[String] 作为参数的控制器?

    设置 使用 玩 框架 v 2 0 4 控制器 def javascriptRoutes Action implicit request gt Ok Routes javascriptRouter jsRoutes routes javasc
  • 在 C++ 中保持对函数返回值的常量引用

    如果我在 C 11 中保留对函数的非引用返回值的常量引用 那么该引用指向堆栈中的哪里 这样做安全吗 string foo std string foo ret foo string return foo ret int main const
  • 在 Java Scanner 中分割数据文件

    我有以下数据想要拆分 1 167 2 LT2A 45 Weekly 1 2 3 4 5 6 7 8 9 10 11 12 13 获取每个值 1 167 2 LT2A 45 每周 1 2 3 4 5 6 7 8 9 10 11 12 13 我
  • 获取列表python的所有有序组合[重复]

    这个问题在这里已经有答案了 我正在尝试生成数字列表的所有 n 项组合 同时保持数字顺序 例如 如果列表是 1 2 3 4 长度为 3 的有序组合为 1 2 3 2 3 4 1 2 4 1 3 4 需要明确的是 我必须保持数字顺序 因此 1
  • android 如何识别一周中的同一天

    为了管理日期 我使用日历类 我正在数据库中保存时间戳 使用 日历时间戳 Calendar getInstance 我可以使用长值存储日期来保存和检索数据库中的日期 这是我的问题 当我要存储时间戳时 我需要知道数据库中是否已经存在属于同一周的
  • 创建类路径资源 [EnableWebMvcConfiguration.class] 中定义的名为“resourceHandlerMapping”的 bean 时出错

    我正在尝试使用 Spring Boot 2 0 0 M4 创建一个 REST OAUTH 安全服务 我不断遇到异常 我读了几篇与创建名为 的 bean 时出错相关的帖子 但没有任何结果 我在这里发布我的 pom xml 以及代码 如果有人觉
  • HTML 工具提示相对于鼠标指针的位置

    如何将工具提示对齐为自然样式 鼠标指针的右下角
  • 安装 mod_wsgi 3.2 时出错

    我正在尝试在 Mac OSX 10 6 6 上安装 mod wsgi 3 2 当我尝试执行以下操作时出现此错误 安装的汇编器有 usr bin libexec gcc darwin x86 64 as 对于体系结构 x86 64 usr b
  • 错误:无法读取未定义的属性

    我尝试按以下方式使用 Express 配置我的应用程序 但这样做时出现错误 服务器 js var express require express var env process env NODE ENV process env NODE E
  • TestNG 使用 selenium 并行执行

    如果我需要同时在两个不同的浏览器上运行相同的一种方法 那么我将如何实现它 例如 public class AppTest2 parameters browser Test dataProvider loginData public void
  • 具有 setuid/功能的 stdbuf

    我正在读取另一个生成输出的进程的输出 缓慢且无限 因为我想实时读取这些数据 所以我使用 stdbuf oL 行缓冲 数据是文本 我无法控制生成过程 因此无法修改源以强制刷新 到目前为止 stdbuf 工作得很好 但是该进程使用 SOCK R
  • laravel 在 heroku 上部署失败

    几个月前 我成功在 Heroku 上部署了 Laravel 5 5 应用程序 我今天尝试用 Laravel 6 12 应用程序做同样的事情 但遇到了很多问题 我添加了 env变量 我添加了Procfile 但我有这个错误 Laravel 5
  • 反射 - Java 8 - 无效的常量类型

    我有一个问题反思图书馆 我正在尝试动态加载实现特定接口的所有类 只要我不在这些类中使用 lambda 表达式 java 8 一切都会正常工作 所有类都已加载 我尝试升级lib版本但效果是一样的 java io IOException inv