2014-09-11 10 views
7

Quindi, ho un programma Java SE di base con l'iniezione delle dipendenze usando Weld 1.2.Hibernate rende Weld non inizializzato in Java SE

Tutto sta funzionando bene, fino a quando butto Hibernate nel mix, con le seguenti voci di dipendenza pom.xml:

<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 essendo la dipendenza aggiunto, rendendolo rottura. Questa è la mia classe di ingresso:

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(); 
    } 
} 

Quando provo a farlo funzionare dopo aver incluso Hibernate dipendenza, questa è la mia uscita:

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) 

Linea 24 nella mia classe EntryPoint è: WeldContainer container = weld.initialize();

risposta

22

Questo non ha nulla a che fare con Hibernate. Ti manca jandex dal tuo classpath, che è richiesto in Weld 2.2.x. Verifica di finire con un jar jandex 1.2 sul classpath dopo la creazione.

Dal momento che si sta utilizzando Maven, aggiungere questo al vostro pom.xml:

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

Anche in relazione:

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

+0

Grazie, che era la soluzione. – Wrench

Problemi correlati