开发Java聊天应用遇Jakarta WebSocket依赖冲突,求解决方案
解决方案:解决Jakarta WebSocket模块冲突问题
问题根源
你遇到的启动层初始化异常,是因为spring-boot-starter-websocket依赖引入了org.apache.tomcat.embed.websocket模块,而tyrus-client间接引入的jakarta.websocket模块包含了相同的jakarta.websocket.server包,导致Java模块系统检测到重复包冲突。
步骤1:移除不必要的依赖
既然你明确只想使用Tyrus客户端,直接删除spring-boot-starter-websocket依赖即可——这个starter是用于Spring Boot的WebSocket服务端开发,对你的客户端需求完全多余。
修改后的pom.xml依赖部分:
<dependencies> <dependency> <groupId>org.kordamp.bootstrapfx</groupId> <artifactId>bootstrapfx-core</artifactId> <version>0.4.0</version> </dependency> <dependency> <groupId>org.controlsfx</groupId> <artifactId>controlsfx</artifactId> <version>11.1.2</version> </dependency> <!-- 仅保留Tyrus客户端依赖 --> <dependency> <groupId>org.glassfish.tyrus</groupId> <artifactId>tyrus-client</artifactId> <version>2.1.3</version> </dependency> <dependency> <groupId>org.slf4j</groupId> <artifactId>slf4j-api</artifactId> <version>2.0.9</version> </dependency> <dependency> <groupId>org.slf4j</groupId> <artifactId>slf4j-simple</artifactId> <version>2.0.9</version> </dependency> </dependencies>
步骤2:修复模块定义冲突
你的项目结构中存在两个module-info.java文件(分别在src/根目录和src/main/java/下),这会导致模块系统混乱。必须删除src/根目录下的module-info.java,只保留src/main/java/下的模块定义文件。
保留的module-info.java无需修改,当前的声明已经满足需求:
module com.example.javachatapplication { requires javafx.controls; requires javafx.fxml; requires org.controlsfx.controls; requires org.kordamp.bootstrapfx.core; requires jakarta.websocket; requires org.slf4j; opens com.client.javachatapplication to javafx.fxml; exports com.client.javachatapplication; }
步骤3:清理并重新构建项目
执行Maven命令清理缓存并重新构建,确保依赖完全更新:
mvn clean install
完成以上步骤后,启动应用应该就能解决模块冲突的问题了。
内容的提问来源于stack exchange,提问作者dinu0101
相关产品推荐
相关产品推荐

