Java Wildfly 8.0.2中的反射库

Java Wildfly 8.0.2中的反射库,java,reflection,wildfly-8,Java,Reflection,Wildfly 8,我试图用反射库扫描类,如果我将动态Web项目添加到另一个项目(纯Java项目),我会得到我想要的类,但是如果在@Startupbean中运行,它是空的。 代码如下: Reflections reflections = new Reflections( new ConfigurationBuilder().filterInputsBy( new FilterBuilder.Include( FilterBuilder.prefix("my.packa

我试图用反射库扫描类,如果我将动态Web项目添加到另一个项目(纯Java项目),我会得到我想要的类,但是如果在
@Startup
bean中运行,它是空的。 代码如下:

Reflections reflections = new Reflections(
    new ConfigurationBuilder().filterInputsBy(
        new FilterBuilder.Include(
            FilterBuilder.prefix("my.package")
        )
    ).setUrls(
        ClasspathHelper.forJavaClassPath()
    ).setScanners(
        new SubTypesScanner(false)
    )
);

Set<Class<? extends Object>> testClasses = reflections.getSubTypesOf(Object.class);
Wildfly 8.2.0。
现在,我可以保存在外部项目中提取的文件并使用load函数,但这不会像它应该的那样是动态的。

我花了很长一段时间来处理这个问题,看起来是因为它的工作方式,没有获得完整的java类路径(使其非常繁重),您应该稍后再加载它。这主要是由于EJB初始化阶段(包括启动bean)期间的动态类创建

加载完整类路径(从启动bean)

addAll(ClasspathHelper.forJavaClassPath());

为了让它穿越吉恩河, e、 g.wild fly,您需要从Servlet上下文侦听器进行反射。对我来说,正确的位置是在构造函数中,但是静态字段可以工作

public class GuiceContext implements ServletContextListener
{

@Override
public void contextInitialized(ServletContextEvent servletContextEvent)
{
    ClasspathHelper.forWebInfLib(servletContextEvent.getServletContext());
  ClasspathHelper.forWebInfClasses(servletContextEvent.getServletContext());
}
尝试让您的bean在没有依赖项的情况下初始化单机版。您还可以使用自定义的注入器(如Guice)来推送bean。在本例中,您将使用GuiceServletContextListener类

您正在排除Object.class的直接排除,因此此实例中的启动bean可能无法加载。

新的子扫描程序(错误);

可以在以下位置找到一个完整的库,其中直接实现了org.reflections和guice