Java 按包名扫描resteasy资源

Java 按包名扫描resteasy资源,java,rest,configuration,resteasy,web.xml,Java,Rest,Configuration,Resteasy,Web.xml,我正在配置我的resteasy应用程序,需要打开自动扫描(两个jaxrs应用程序在类路径中,加载时会中断) 因此,我将web.xml配置如下: <context-param> <param-name>resteasy.scan</param-name> <param-value>false</param-value> </context-param> <context-param>

我正在配置我的resteasy应用程序,需要打开自动扫描(两个jaxrs应用程序在类路径中,加载时会中断)

因此,我将web.xml配置如下:

    <context-param>
    <param-name>resteasy.scan</param-name>
    <param-value>false</param-value>
</context-param>

<context-param>
    <param-name>resteasy.resources</param-name>
    <param-value>
        io.swagger.jaxrs.listing.ApiListingResource,
        com.mycompany.resource.ClientResource,
        com.mycompany.resource.AccountResource,
        ... etc
    </param-value>
</context-param>

轻松扫描
假的
resteasy.resources
io.swagger.jaxrs.listing.ApiListingResource,
com.mycompany.resource.ClientResource,
com.mycompany.resource.AccountResource,
... 等

resteasy中是否有任何方法可以通过包(
com.mycompany.resource.*
)名称扫描,而不必添加每个资源?似乎使用JAXR是可能的,但resteasy不可能

我不是JAXR方面的专家,但是你检查过下面的那些了吗

resteasy.scan 
resteasy.scan.resources 

文件非常清楚:

要注册的完全限定JAX-RS资源类名的逗号分隔列表

例如,您可以使用库自己实现这一点。假设以下文本文件:

com.foo.bar.TestResource
com.foo.baz.*
我们可以在应用程序类中读取此文本文件,搜索所有类并将其添加到
getClasses
返回的集合中:

@ApplicationPath("/")
public class RestApplication extends Application {

    Set<Class<?>> classes;

    public RestApplication(@Context ServletContext servletContext) {
        classes = new HashSet<>();
        try {
            URI resourcesConfig = servletContext.getResource("/WEB-INF/resources.txt").toURI();
            List<String> resources = Files.readAllLines(Paths.get(resourcesConfig), Charset.forName("UTF-8"));
            for (String resource : resources) {
                parseResources(resource);
            }
        } catch (IOException | URISyntaxException | ClassNotFoundException ex) {
            throw new IllegalArgumentException("Could not add resource classes", ex);
        }
    }

    private void parseResources(String resource) throws ClassNotFoundException, IOException {
        if (!resource.endsWith(".*")) {
            classes.add(Class.forName(resource));
            return;
        }
        String pkg = resource.substring(0, resource.length() - 2);
        Reflections reflections = new Reflections(pkg);
        for (Class<?> scannedResource : reflections.getTypesAnnotatedWith(Path.class)) {
            classes.add(scannedResource);
        }
    }

    @Override
    public Set<Class<?>> getClasses() {
        return classes;
    }

}
@ApplicationPath(“/”)
公共类重新启动应用程序扩展了应用程序{
Set>getClasses(){
返回类;
}
}

注意:我们只是在类级别添加带有
@Path
注释的资源。

我希望有一些现成的东西,但这就完成了。坦克