2016-02-22 6 views
0

Я пытаюсь создать автономное приложение Java SE с CDI. Я следовал за статьей this, и я использую Weld. Однако, когда я пытаюсь создать экземпляр Weld weld = new Weld();, я получаю следующую ошибку ClassNotFound.Невозможно использовать Weld for Context и Dependency Injection (CDI) в моем автономном приложении Java SE

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 и не содержит этот интерфейс. В чем проблема? Заранее спасибо.

Ниже мой тест класс 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

также посмотреть на официальном учебнике: http://docs.jboss.org/weld/reference/latest/en -US/html/environment.html # _java_se – Puce

+0

Какую версию Weld вы используете? – Puce

+0

Как запустить приложение? – Puce

ответ

0

У меня была эта проблема при написании модульных тестов. Вот ответ на github и вот соответствующая часть в моем файле пом:

<!--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> 
Смежные вопросы