TomEE Maven插件自动重载失败:Can't lookup Deployer异常求助
TomEE Maven插件自动重载失败:Can't lookup Deployer 问题解决
问题核心
从异常日志里的关键提示[Ljava.net.URI; is not whitelisted as deserializable就能定位根源:这是TomEE 9的序列化安全限制导致的——默认不允许该类进行反序列化操作,直接阻断了Deployer服务的JNDI查找流程,最终抛出Prematurely reached the end of the stream的EOF异常。
解决方案
1. 配置序列化白名单
在TomEE Maven插件中添加系统属性,放行[Ljava.net.URI;类的序列化:
修改pom.xml里的tomee-maven-plugin配置,新增<systemProperties>节点:
<plugin> <groupId>org.apache.tomee.maven</groupId> <artifactId>tomee-maven-plugin</artifactId> <version>9.0.0</version> <configuration> <deployOpenEjbApplication>true</deployOpenEjbApplication> <tomeeVersion>9.0.0</tomeeVersion> <tomeeClassifier>plume</tomeeClassifier> <synchronization> <extensions> <extension>.class</extension> </extensions> </synchronization> <reloadOnUpdate>true</reloadOnUpdate> <!-- 添加序列化白名单配置 --> <systemProperties> <property> <name>tomee.serialization.class.whitelist</name> <value>[Ljava.net.URI;</value> </property> </systemProperties> </configuration> </plugin>
或者启动时直接追加JVM参数:
mvn clean install package tomee:run -Dtomee.serialization.class.whitelist=[Ljava.net.URI;
2. 简化重载触发逻辑
开启reloadOnUpdate后,插件会自动监控class文件变化,无需单独执行mvn compile。直接修改代码后,用IDE自动编译或者执行mvn compile,插件会自动触发重载流程。
3. 版本兼容性校验
确保TomEE插件版本(9.0.0)和TomEE核心版本(9.0.0)完全一致,避免版本不匹配引发的通信问题。如果问题仍存在,可以尝试升级插件到9.0.16+的稳定版,该版本修复了早期的部分序列化相关bug。
验证步骤
- 停止当前运行的TomEE服务
- 应用上述配置修改
- 重新执行
mvn tomee:run启动服务 - 修改代码并触发编译(IDE自动编译或
mvn compile) - 观察TomEE日志,确认重载操作成功执行
内容的提问来源于stack exchange,提问作者Cléber Macieski
相关产品推荐
相关产品推荐

