WildFly环境REST客户端报ClassNotFoundException问题及解决疑问
我在开发REST服务并尝试获取JSON数据时,使用WildFly服务器,运行客户端出现如下错误:
Caused by: java.lang.ClassNotFoundException: jakarta.ws.rs.client.ClientBuilder
最初的Maven POM依赖配置如下:
<?xml version="1.0" encoding="UTF-8"?> <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd"> <modelVersion>4.0.0</modelVersion> <groupId>com.metehan</groupId> <artifactId>restsetup</artifactId> <version>1.0-SNAPSHOT</version> <name>restsetup</name> <packaging>war</packaging> <properties> <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> <maven.compiler.target>1.8</maven.compiler.target> <maven.compiler.source>1.8</maven.compiler.source> </properties> <dependencies> <dependency> <groupId>jakarta.enterprise</groupId> <artifactId>jakarta.enterprise.cdi-api</artifactId> <version>3.0.0</version> <scope>provided</scope> </dependency> <dependency> <groupId>jakarta.ws.rs</groupId> <artifactId>jakarta.ws.rs-api</artifactId> <version>3.0.0</version> <scope>provided</scope> </dependency> <dependency> <groupId>jakarta.servlet</groupId> <artifactId>jakarta.servlet-api</artifactId> <version>5.0.0</version> <scope>provided</scope> </dependency> <dependency> <groupId>jakarta.json</groupId> <artifactId>jakarta.json-api</artifactId> <version>2.1.1</version> </dependency> <dependency> <groupId>org.projectlombok</groupId> <artifactId>lombok</artifactId> <version>1.18.24</version> <scope>provided</scope> </dependency> </dependencies> <build> <plugins> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-war-plugin</artifactId> <version>3.3.2</version> </plugin> </plugins> </build> </project>
之后我移除所有依赖,仅添加以下依赖便解决了问题:
<dependency> <groupId>org.jboss.resteasy</groupId> <artifactId>resteasy-client</artifactId> <version>6.2.1.Final</version> </dependency>
我想知道resteasy-client依赖是否包含了其他所需的依赖?
回答:
是的,resteasy-client依赖确实会通过Maven的传递依赖机制,自动引入客户端运行所需的所有必要组件:
Jakarta REST API的实现类:你原POM里的
jakarta.ws.rs-api只是API接口定义,没有具体实现,且scope=provided意味着依赖由WildFly容器提供。但如果客户端是独立运行(而非部署在WildFly内),容器不会提供实现类,导致找不到ClientBuilder的具体实现。resteasy-client作为WildFly默认JAX-RS实现(RESTEasy)的客户端模块,包含了jakarta.ws.rs-api的完整实现。RESTEasy核心组件:包含客户端请求处理、响应解析的核心类,支撑REST客户端的基础功能。
JSON处理相关依赖:RESTEasy默认会引入JSON处理的实现组件,满足你获取JSON数据的需求,无需额外添加
jakarta.json-api的实现包。其他配套依赖:比如HTTP客户端适配、异常处理等支撑模块,确保客户端可以独立运行。
简单来说,resteasy-client是一个聚合性的依赖,它把REST客户端运行所需的API实现、核心组件、配套工具都通过传递依赖整合在一起,所以单独添加它就能解决你的ClassNotFoundException问题。
内容的提问来源于stack exchange,提问作者Metehan

