JBoss7.2环境使用javax javaee-api 8依赖找不到JsonBuilder类问题求助
问题排查及解决方法
可能的问题原因
- 编译期类路径缺失:你配置的
javaee-api依赖scope为provided,Maven不会将该依赖拉入本地编译类路径,默认依赖运行环境提供对应类。但Java 11已经移除了内置的JavaEE相关API,本地编译时没有可用的类来源,直接触发编译报错。另外部分开源渠道的javaee-api 8.0包做了裁剪,本身就不包含JSON-B(javax.json.bind)相关API。 - 类名/包名导入错误:JSON-B 1.0规范中,绑定构建类的全限定名是
javax.json.bind.JsonbBuilder,你代码里导入的javax.json.bind.JsonBuilder属于拼写错误。注意JSON-P(JSON处理API)中的构建类为javax.json.JsonBuilder,属于javax.json包而非javax.json.bind包,大概率是混淆了两个API的类名。 - JBoss模块未显式声明:即使解决编译问题,JBoss 7.2默认不会将内置的
javax.json.bind模块暴露给部署的应用,就算服务器模块目录下存在对应jar包,应用运行时仍然会报类找不到。
修复步骤
- 核对代码导入的类名:如果是要用JSON-B做对象序列化/反序列化,改成导入
javax.json.bind.JsonbBuilder;如果是要用JSON-P构建JSON对象,改成导入javax.json.JsonBuilder。 - 调整pom依赖配置,补全编译期的API来源:
<!-- 保留原有javaee-api依赖的前提下,新增JSON-B API依赖 --> <dependency> <groupId>javax.json.bind</groupId> <artifactId>javax.json.bind-api</artifactId> <version>1.0</version> <scope>provided</scope> </dependency> <!-- 如果用到JSON-P的API,同时新增以下依赖 --> <dependency> <groupId>javax.json</groupId> <artifactId>javax.json-api</artifactId> <version>1.1</version> <scope>provided</scope> </dependency>
如果你不想单独新增依赖,也可以将原有javaee-api的scope从provided改成compile,但要注意后续打包时排除和服务器冲突的类,避免运行时包冲突。
3. 在应用的WEB-INF目录下新增jboss-deployment-structure.xml配置,显式声明依赖JBoss的对应模块:
<?xml version="1.0" encoding="UTF-8"?> <jboss-deployment-structure> <deployment> <dependencies> <module name="javax.json.bind.api" export="true"/> <module name="javax.json.api" export="true"/> </dependencies> </deployment> </jboss-deployment-structure>
内容的提问来源于stack exchange,提问作者Joe
相关产品推荐
相关产品推荐

