You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Helidon 4.0.5中JAX-RS无法识别库中定义的类

Helidon 4.0.5 依赖库中JAX-RS Provider无法被识别的解决方法

问题原因

Helidon 4的JAX-RS默认仅扫描应用自身模块的包路径,依赖库中的@Provider注解类不会自动被扫描发现,所以放在应用内正常,放在依赖库中失效。

解决方法

方法1:手动注册Provider

在应用的JAX-RS应用类中,显式添加依赖库中的过滤器类:

import com.example.library.LoggingRequestFilter;
import jakarta.ws.rs.ApplicationPath;
import jakarta.ws.rs.core.Application;
import java.util.Set;

@ApplicationPath("/")
public class MyApplication extends Application {
    @Override
    public Set<Class<?>> getClasses() {
        // 可同时添加应用自身的资源/Provider类,此处示例仅添加外部过滤器
        return Set.of(LoggingRequestFilter.class);
    }
}

方法2:配置全局包扫描

在应用的配置文件(application.yaml或application.properties)中,指定需要扫描的依赖库包路径:

YAML格式(application.yaml)

helidon:
  webserver:
    routing:
      jaxrs:
        scan-packages:
          - com.example.library  # 依赖库的包路径
          - com.your.app         # 不要遗漏应用自身的包路径

Properties格式(application.properties)

helidon.webserver.routing.jaxrs.scan-packages=com.example.library,com.your.app

方法3:给依赖库添加CDI扫描支持

在依赖库的src/main/resources/META-INF目录下创建beans.xml文件,内容如下:

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://xmlns.jcp.org/xml/ns/javaee"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/beans_2_0.xsd"
       version="2.0" bean-discovery-mode="all">
</beans>

Helidon的JAX-RS基于CDI集成,添加该文件后,CDI会自动扫描依赖库中的@Provider类,无需应用端额外配置。

验证方式

启动应用后,调用任意JAX-RS接口,查看控制台是否输出FILTERER,确认过滤器生效。

内容的提问来源于stack exchange,提问作者Sourabh

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.29 11:03:09