Maven项目从Java 8迁移至JDK 11时jboss-as-maven-plugin报错求助
JDK 8 迁移至 JDK 11 问题排查与解决方案
针对你在DocumentsStorageWS项目迁移中遇到的三个问题,逐个给出解决思路:
1. jboss.txn.ArjunaObjectStoreEnvironment服务启动失败
- 核心原因:Arjuna事务管理器旧版本依赖JDK8内部实现,与JDK11模块化机制不兼容,或是所用JBoss组件版本未适配JDK11。
- 解决步骤:
- 升级JBoss事务相关依赖到支持JDK11的版本:比如将
jboss-transaction-spi或arjuna系列依赖从7.x版本升级至9.x及以上。 - 检查Arjuna配置文件(如
jbossts-properties.xml),移除对JDK内部废弃路径的引用。 - 若使用WildFly容器,确保容器版本为14及以上(WildFly从14开始全面支持JDK11)。
- 升级JBoss事务相关依赖到支持JDK11的版本:比如将
2. Infinispan子系统NoClassDefFoundError: jdk/internal/reflect/ConstructorAccessorImpl
- 核心原因:JDK9+对
jdk.internal.reflect包进行封装限制,旧版Infinispan直接依赖该内部API。 - 解决步骤:
- 优先升级Infinispan依赖到10.x及以上版本(Infinispan 9.4开始部分支持JDK11,10.x版本完成全面适配)。
- 若暂时无法升级,可在Maven编译/运行参数中添加开放模块权限的参数(临时 workaround,不推荐长期使用):
--add-opens java.base/jdk.internal.reflect=ALL-UNNAMED - 排查项目自定义代码,若存在直接引用
jdk.internal.reflect包的逻辑,替换为标准Java反射API。
3. Web子系统javax.xml.stream.FactoryConfigurationError无法实例化__redirected.__XMLInputFactory
- 核心原因:JDK11移除了JAXB、StAX等Java EE模块,且JBoss的
__redirected系列工厂类在模块化环境下类加载机制变化。 - 解决步骤:
- 在pom.xml中手动引入JAXB及StAX相关依赖(JDK11不再内置这些模块):
<dependency> <groupId>javax.xml.bind</groupId> <artifactId>jaxb-api</artifactId> <version>2.3.1</version> </dependency> <dependency> <groupId>com.sun.xml.bind</groupId> <artifactId>jaxb-impl</artifactId> <version>2.3.1</version> <scope>runtime</scope> </dependency> <dependency> <groupId>javax.xml.stream</groupId> <artifactId>stax-api</artifactId> <version>1.0-2</version> </dependency> <dependency> <groupId>javax.activation</groupId> <artifactId>activation</artifactId> <version>1.1.1</version> </dependency> - 使用
mvn dependency:tree排查依赖冲突,排除JBoss容器自带的旧版stax-api或jaxb-api。 - 检查Web子系统配置文件,确保XML工厂类配置未引用已废弃的内部实现。
- 在pom.xml中手动引入JAXB及StAX相关依赖(JDK11不再内置这些模块):
通用迁移建议
- 配置Maven编译插件适配JDK11:
<plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-compiler-plugin</artifactId> <version>3.8.1</version> <configuration> <source>11</source> <target>11</target> <release>11</release> </configuration> </plugin> - 对所有第三方依赖进行兼容性排查,优先升级到标注支持JDK11的版本。
- 使用IDE的JDK迁移工具(如IntelliJ的Migration Assistant)扫描项目中使用的废弃API,逐一替换。
内容的提问来源于stack exchange,提问作者Lore
相关产品推荐
相关产品推荐

