java - java.lang.UnsupportedClassVersionError:无法从本地模块加载器@307db34d 链接模块信息(模块“javax.json.api”版本 1.1.2
问题描述
我正在使用 OpenJdk 1.8 运行 jbpm(版本 jbpm-server-7.17.0.Final-dist)。Wildfly 服务器开始正常,我能够使用单个人工节点创建一个示例进程并能够执行它。
当我尝试添加 lombok Slf4j、logback classic、jackson 数据绑定库以在人工任务中使用 logback 实现日志记录时,问题就开始了。添加上述依赖项并单击构建后,将引发以下错误
16:41:57,480 WARN [org.jboss.modules.define] (default task-8) Failed to define class module-info in Module "javax.json.api" version 1.1.2 from local module loader @307db34d (finder: local module finder @3f3f8e92 (roots: D:\jBPM\jbpm-server-7.17.0.Final-dist\modules,D:\jBPM\jbpm-server-7.17.0.Final-dist\modules\system\layers\base)): java.lang.UnsupportedClassVersionError: Failed to link module-info (Module "javax.json.api" version 1.1.2 from local module loader @307db34d (finder: local module finder @3f3f8e92 (roots: D:\jBPM\jbpm-server-7.17.0.Final-dist\modules,D:\jBPM\jbpm-server-7.17.0.Final-dist\modules\system\layers\base))): JVMCFRE003 bad major version; class=module-info, offset=6
at java.lang.ClassLoader.defineClassImpl(Native Method)
at java.lang.ClassLoader.defineClass(ClassLoader.java:379)
lang.Class.forNameImpl(Native Method)
我搜索了错误“JVMCFRE003 bad major version; class=module-info, offset=6”,发现这是因为分别编译和执行特定类时 javac 和 java 版本不匹配。
如果我切换到 java 9 来运行 jbpm 服务器,我开始收到同一个类的另一个错误
15:00:50,312 WARN [org.jboss.modules.define] (default task-3) Failed to define class module-info in Module "javax.json.api" version 1.1.2 from local module loader @4f0100a7 (finder: local module finder @3cdf2c61 (roots: D:\jBPM\jbpm-server-7.22.0.Final-dist\modules,D:\jBPM\jbpm-server-7.22.0.Final-dist\modules\system\layers\base)): java.lang.NoClassDefFoundError: Failed to link module-info (Module "javax.json.api" version 1.1.2 from local module loader @4f0100a7 (finder: local module finder @3cdf2c61 (roots: D:\jBPM\jbpm-server-7.22.0.Final-dist\modules,D:\jBPM\jbpm-server-7.22.0.Final-dist\modules\system\layers\base))): module-info is not a class because access_flag ACC_MODULE is set
at java.base/java.lang.ClassLoader.defineClass1(Native Method)
at java.base/java.lang.ClassLoader.defineClass(ClassLoader.java:1007)
以下是我试图添加到我创建的 jbpm 项目的依赖项
<dependencies>
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<version>1.18.8</version>
</dependency>
<dependency>
<groupId>net.logstash.logback</groupId>
<artifactId>logstash-logback-encoder</artifactId>
<version>6.0</version>
</dependency>
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-databind</artifactId>
<version>2.9.5</version>
</dependency>
<dependency>
<groupId>ch.qos.logback</groupId>
<artifactId>logback-classic</artifactId>
<version>1.2.3</version>
</dependency>
</dependencies>
有没有办法摆脱这个错误?提前谢谢你的帮助。如果我能够使用 open jdk 1.8 运行 jbpm 服务器,那就太好了。谢谢
解决方案
我们已经取得了一些进展。下载https://github.com/eclipse-ee4j/jsonp/releases 1.1.4 并用 1.8 编译。然后替换他们在您的安装中使用的版本 1.1.6(我的是 C:\Program Files\jBPM\modules\system\layers\base\javax\json api 并绑定)jbpm。您还需要修改 module.xml 将 1.9 更改为 1.8 并将 1.1.6 更改为 1.1.4。这将删除该警告。现在你会得到警告说 jakarta.json.bind-api 1.02 是用 1.9 编译的,也就是。您需要找到https://github.com/eclipse-ee4j/jsonb-api/releases并使用 1.8 构建,然后在“bind”文件夹中替换并修改 module.xml....
推荐阅读
- microsoft-graph-api - Microsoft Graph API 安全性
- elasticsearch - 使用浮点的弹性搜索
- google-apps-script - 如何在 Google Script Apps 中按 ID 附加数据?
- lxc - 怎么把lxc容器装满?
- ajax - 为什么使用 laravel ajax 发送到控制器时 id 给出 null
- html - Jquery var迭代后DIV显示不起作用
- python - 在数组中找到局部最小值
- scala - 如何使用 Scala 学习 REST 和 DAO?
- bash - 使用 printf 从特定字母/符号输出字符串
- python - 如何在机器上未安装 VLC 的情况下初始化 python-vlc(便携式 VLC 实例)