tomee-maven-plugin是否有支持Java 14的可用版本?
Java 14环境下tomee-maven-plugin 8.0.5启动报类版本不兼容的解决方法
根因说明
- 报错栈中的
org.apache.xbean.asm7是Tomee 8.0.5运行时内置的字节码扫描依赖,并非Maven插件层面的可传递依赖。ASM7版本最高支持解析Java 13生成的class文件(对应major version 57),无法识别Java 14编译生成的class文件(对应major version 58),是触发类扫描失败的直接原因。 - 此前手动替换ASM8版本操作不生效的核心逻辑:仅修改Maven插件自身的依赖配置,不会变更最终打包进可执行Jar的Tomee核心运行时组件,实际启动时类路径加载的仍然是旧版ASM7。
- 经Maven仓库检索,8.0.5确为tomee-maven-plugin 8.x系列的最新稳定版本,不存在原生适配Java 14的同版本更新包。
可落地解决方案
- 方案1:调整项目编译版本适配现有运行时能力
修改项目pom.xml中maven-compiler-plugin的配置,将编译目标调整为Java 13,生成的class文件版本可被Tomee 8.0.5内置的ASM7正常解析,无其他额外依赖改动。
配置示例:<plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-compiler-plugin</artifactId> <version>3.11.0</version> <configuration> <source>13</source> <target>13</target> </configuration> </plugin> - 方案2:手动替换可执行Jar内的ASM依赖
完成可执行Jar打包后,手动将Jar包内的xbean-asm7-shaded依赖替换为API完全兼容的xbean-asm8-shaded版本,同步调整Jar内部类路径加载的包路径映射,保证类扫描逻辑能加载到替换后的ASM8组件。替换过程中需严格匹配依赖版本与Tomee 8.0.5的内部接口定义,避免出现类加载异常。 - 方案3:切换至Tomee 9.x系列对应插件版本
Tomee 9.x系列核心运行时已内置ASM9组件,原生支持解析Java 14及以上版本编译的class文件。直接将插件版本替换为9.x系列的GA稳定版即可,原有exec目标生成可执行Jar的配置逻辑无需修改,与8.0.5版本功能完全兼容。
注意:若项目开启了Java编译的预览特性,即使替换了高版本ASM依赖,也可能因字节码结构不被Tomee解析逻辑识别出现扫描失败,需关闭编译配置中的预览特性开关。
内容的提问来源于stack exchange,提问作者DJAMEL DAHMANE
相关产品推荐
相关产品推荐

