在我独立的Java SE应用程序中无法使用Weld for Context and Dependency Injection(CDI)

时间:2016-02-22 12:06:19

标签: java cdi weld

我正在尝试使用CDI创建一个独立的Java SE应用程序。我跟着 this文章,我正在使用Weld。但是,当我尝试实例化Weld weld = new Weld();时,我收到以下ClassNotFound错误。

Exception in thread "main" java.lang.NoClassDefFoundError: org/jboss/weld/environment/ContainerInstanceFactory
    at java.lang.ClassLoader.defineClass1(Native Method)
    at java.lang.ClassLoader.defineClass(ClassLoader.java:760)
    at java.security.SecureClassLoader.defineClass(SecureClassLoader.java:142)
    at java.net.URLClassLoader.defineClass(URLClassLoader.java:467)
    at java.net.URLClassLoader.access$100(URLClassLoader.java:73)
    at java.net.URLClassLoader$1.run(URLClassLoader.java:368)
    at java.net.URLClassLoader$1.run(URLClassLoader.java:362)
    at java.security.AccessController.doPrivileged(Native Method)
    at java.net.URLClassLoader.findClass(URLClassLoader.java:361)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:424)
    at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:331)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:357)
    at org.agorava.socializer.Test.main(Test.java:59)
Caused by: java.lang.ClassNotFoundException: org.jboss.weld.environment.ContainerInstanceFactory
    at java.net.URLClassLoader.findClass(URLClassLoader.java:381)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:424)
    at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:331)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:357)
    ... 13 more

我检查了焊接JAR,它没有包含这个接口。这是什么问题?提前谢谢。

以下是我的Test类org.agorava.socializer.Test

public class Test  {

    public static void main(String[] args){

        Weld w = new Weld();
        WeldContainer factory = w.initialize();
        OAuthLifeCycleService service = factory.instance().select(OAuthLifeCycleService.class).get();
        System.out.println(service.getCurrentService());        

    }

}

2 个答案:

答案 0 :(得分:1)

似乎您的问题与版本“org.jboss.weld.environment.ContainerInstanceFactory”有关,在较新版本中可用(焊接3) 参考https://github.com/weld/core/commit/36563d252a4a2375692d7669e7a523bb6ba89136

尝试更新您的焊接版本。

答案 1 :(得分:0)

我在编写单元测试时遇到了这个问题。 以下是github的答案,这是我的pom文件中的相关部分:

    <!--Enable CDI in tomcat-->
    <dependency>
        <groupId>org.jboss.weld.servlet</groupId>
        <artifactId>weld-servlet</artifactId>
        <version>2.4.5.Final</version>
    </dependency>
    <!--Enables unit testing CDI apps-->
    <dependency>
        <groupId>org.jglue.cdi-unit</groupId>
        <artifactId>cdi-unit</artifactId>
        <version>4.0.1</version>
        <scope>test</scope>
    </dependency>
    <!--This is required implicitly for cdi-unit 4.0.1-->
    <dependency>
        <groupId>org.jboss.weld.se</groupId>
        <artifactId>weld-se</artifactId>
        <version>2.4.5.Final</version>
        <scope>test</scope>
    </dependency>
相关问题