2014-09-11 5 views
7

Итак, у меня есть базовая программа Java SE с инъекцией зависимостей с использованием Weld 1.2.Hibernate делает Weld не инициализацией в Java SE

Все работает отлично, пока я не бросить Hibernate в смеси со следующими записями 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 быть добавлена ​​зависимость, что делает его сломать. Это мой вход класс:

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

Когда я пытаюсь запустить его после того, как в том числе Hibernate зависимость, это мой выход:

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 в моем классе EntryPoint является: WeldContainer container = weld.initialize();

ответ

22

Это не имеет ничего общего с Hibernate. Вам не хватает jandex из вашего пути к классам, который требуется в Weld 2.2.x. Убедитесь, что вы закончили с jandex 1.2 jar на пути к классу после сборки.

Поскольку вы используете Maven, добавьте в ваш pom.xml:

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

также связано:

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

+0

Спасибо, что было решение. – Wrench

Смежные вопросы