Hibernate makes Weld not initialization in Java SE

So, I have a basic Java SE program with dependency injection using Weld 1.2.

Everything works fine until I dump Hibernate into the mix with the following pom.xml dependency entries:

<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> 

Hibernation is an added dependency, which leads to its rupture. This is my input class:

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

When I try to run it after turning on the Hibernate dependency, this is my output:

 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) 

Line 24 in my EntryPoint class: WeldContainer container = weld.initialize();

+7
java maven hibernate cdi weld
source share
2 answers

This has nothing to do with Hibernate. You are missing jandex from your class path, which is required in Weld 2.2.x. Make sure you are done with the jandex 1.2 jar on the class path after the build.

Since you are using maven, add this to your pom.xml:

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

Related also:

Why does Hibernate 4.2 use jandex and classmate if its Maven POM defines them as a scope?

+22
source share

It definitely has to do with hibernate because hibernate uses a different version of jandex than the one that welding uses, so you can exclude jandex from the hibernate class dependency as follows:

 <dependency> <groupId>org.hibernate</groupId> <artifactId>hibernate-entitymanager</artifactId> <version>${hibernate.version}</version> <exclusions> <exclusion> <groupId>org.jboss</groupId> <artifactId>jandex</artifactId> </exclusion> </exclusions> </dependency> 
0
source share

All Articles