2014-09-11 6 views
7

Donc, j'ai un programme Java SE basique avec injection de dépendances utilisant Weld 1.2.Hibernate fait que Weld ne s'initialise pas en Java SE

Tout fonctionne très bien, jusqu'à ce que je jette Hibernate dans le mélange, avec les entrées de dépendance pom.xml suivantes:

<dependency> 
    <groupId>javax</groupId> 
    <artifactId>javaee-api</artifactId> 
    <version>7.0</version> 
</dependency> 
<dependency> 
    <groupId>org.jboss.weld.se</groupId> 
    <artifactId>weld-se</artifactId> 
    <version>2.2.4.Final</version> 
</dependency> 
<dependency> 
    <groupId>org.hibernate</groupId> 
    <artifactId>hibernate-core</artifactId> 
    <version>4.3.6.Final</version> 
</dependency> 

Hibernate étant la dépendance ajoutée, ce qui en fait briser. Ceci est ma classe d'entrée:

public class EntryPoint { 
    public static void main(String[] ARGV) { 
     Weld weld = new Weld(); 
     WeldContainer container = weld.initialize(); 

     Application application = container.instance().select(Application.class).get(); 

     application.testFetch(); 

     weld.shutdown(); 
    } 
} 

Lorsque je tente de l'exécuter après y compris la dépendance Hibernate, ceci est ma sortie:

Sep 11, 2014 11:13:44 PM org.jboss.weld.bootstrap.WeldStartup <clinit> 
INFO: WELD-000900: 2.2.4 (Final) 
Sep 11, 2014 11:13:44 PM org.jboss.weld.bootstrap.WeldStartup startContainer 
INFO: WELD-000101: Transactional services not available. Injection of @Inject UserTransaction not available. Transactional observers will be invoked synchronously. 
Exception in thread "main" org.jboss.weld.exceptions.DeploymentException: org.jboss.jandex.ClassInfo.hasNoArgsConstructor()Z 
    at org.jboss.weld.executor.AbstractExecutorServices.checkForExceptions(AbstractExecutorServices.java:66) 
    at org.jboss.weld.executor.AbstractExecutorServices.invokeAllAndCheckForExceptions(AbstractExecutorServices.java:43) 
    at org.jboss.weld.executor.AbstractExecutorServices.invokeAllAndCheckForExceptions(AbstractExecutorServices.java:51) 
    at org.jboss.weld.bootstrap.ConcurrentBeanDeployer.addClasses(ConcurrentBeanDeployer.java:62) 
    at org.jboss.weld.bootstrap.BeanDeployment.createClasses(BeanDeployment.java:209) 
    at org.jboss.weld.bootstrap.WeldStartup.startInitialization(WeldStartup.java:351) 
    at org.jboss.weld.bootstrap.WeldBootstrap.startInitialization(WeldBootstrap.java:76) 
    at org.jboss.weld.environment.se.Weld.initialize(Weld.java:157) 
    at com.mybeautycompare.integration.EntryPoint.main(EntryPoint.java:24) 
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) 
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) 
    at java.lang.reflect.Method.invoke(Method.java:483) 
    at com.intellij.rt.execution.application.AppMain.main(AppMain.java:134) 
Caused by: java.lang.NoSuchMethodError: org.jboss.jandex.ClassInfo.hasNoArgsConstructor()Z 
    at org.jboss.weld.environment.se.discovery.WeldSEClassFileInfo.<init>(WeldSEClassFileInfo.java:65) 
    at org.jboss.weld.environment.se.discovery.WeldSEClassFileServices.getClassFileInfo(WeldSEClassFileServices.java:85) 
    at org.jboss.weld.bootstrap.FastAnnotatedTypeLoader.loadAnnotatedType(FastAnnotatedTypeLoader.java:61) 
    at org.jboss.weld.bootstrap.BeanDeployer.addClass(BeanDeployer.java:97) 
    at org.jboss.weld.bootstrap.ConcurrentBeanDeployer$1.doWork(ConcurrentBeanDeployer.java:65) 
    at org.jboss.weld.bootstrap.ConcurrentBeanDeployer$1.doWork(ConcurrentBeanDeployer.java:62) 
    at org.jboss.weld.executor.IterativeWorkerTaskFactory$1.call(IterativeWorkerTaskFactory.java:60) 
    at org.jboss.weld.executor.IterativeWorkerTaskFactory$1.call(IterativeWorkerTaskFactory.java:53) 
    at java.util.concurrent.FutureTask.run(FutureTask.java:266) 
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142) 
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617) 
    at java.lang.Thread.run(Thread.java:745) 

Ligne 24 dans ma classe EntryPoint est: WeldContainer container = weld.initialize();

Répondre

22

Cette n'a rien à voir avec Hibernate. Il vous manque jandex de votre classpath, qui est requis dans Weld 2.2.x. Vérifiez que vous vous retrouvez avec un jar jandex 1.2 sur votre chemin de classe après la construction.

Puisque vous utilisez Maven, ajoutez à votre pom.xml:

<dependency> 
    <groupId>org.jboss</groupId> 
    <artifactId>jandex</artifactId> 
    <version>1.2.2.Final</version> 
</dependency> 

également porté:

Why is Hibernate 4.2 using jandex and classmate if its Maven POM defines them as test scope?

+0

Merci, c'était la solution. – Wrench

Questions connexes