我正在尝试使用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());
}
}
答案 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>