Java Hibernate尝试在EntityManagerFactory创建中加载Jandex

Java Hibernate尝试在EntityManagerFactory创建中加载Jandex,java,hibernate,jpa,Java,Hibernate,Jpa,目前正在刷新我的JPA和Hibernate专有技术,我正在以todo list swing应用程序的形式编写一些示例代码 这是再现我的问题的最小示例: public static void main(String[] args) { EntityManagerFactory emf = Persistence.createEntityManagerFactory("SwingTodoPU"); } 这是我使用Netbeans的默认构建配置运行应用程序时得到的stacktrace,没有像

目前正在刷新我的JPA和Hibernate专有技术,我正在以todo list swing应用程序的形式编写一些示例代码

这是再现我的问题的最小示例:

public static void main(String[] args) {
    EntityManagerFactory emf = Persistence.createEntityManagerFactory("SwingTodoPU");
}
这是我使用Netbeans的默认构建配置运行应用程序时得到的stacktrace,没有像Maven这样的其他构建工具:

Okt 09, 2015 12:10:21 PM org.hibernate.ejb.HibernatePersistence logDeprecation
WARN: HHH015016: Encountered a deprecated javax.persistence.spi.PersistenceProvider [org.hibernate.ejb.HibernatePersistence]; use [org.hibernate.jpa.HibernatePersistenceProvider] instead.
Okt 09, 2015 12:10:21 PM org.hibernate.ejb.HibernatePersistence logDeprecation
WARN: HHH015016: Encountered a deprecated javax.persistence.spi.PersistenceProvider [org.hibernate.ejb.HibernatePersistence]; use [org.hibernate.jpa.HibernatePersistenceProvider] instead.
Okt 09, 2015 12:10:21 PM org.hibernate.ejb.HibernatePersistence logDeprecation
WARN: HHH015016: Encountered a deprecated javax.persistence.spi.PersistenceProvider [org.hibernate.ejb.HibernatePersistence]; use [org.hibernate.jpa.HibernatePersistenceProvider] instead.
Exception in thread "main" java.lang.NoClassDefFoundError: org/jboss/jandex/IndexView
    at org.hibernate.jpa.boot.spi.Bootstrap.getEntityManagerFactoryBuilder(Bootstrap.java:51)
    at org.hibernate.jpa.HibernatePersistenceProvider.getEntityManagerFactoryBuilderOrNull(HibernatePersistenceProvider.java:129)
    at org.hibernate.ejb.HibernatePersistence.getEntityManagerFactoryBuilderOrNull(HibernatePersistence.java:93)
    at org.hibernate.jpa.HibernatePersistenceProvider.getEntityManagerFactoryBuilderOrNull(HibernatePersistenceProvider.java:86)
    at org.hibernate.ejb.HibernatePersistence.getEntityManagerFactoryBuilderOrNull(HibernatePersistence.java:101)
    at org.hibernate.jpa.HibernatePersistenceProvider.createEntityManagerFactory(HibernatePersistenceProvider.java:67)
    at org.hibernate.ejb.HibernatePersistence.createEntityManagerFactory(HibernatePersistence.java:54)
    at javax.persistence.Persistence.createEntityManagerFactory(Persistence.java:55)
    at javax.persistence.Persistence.createEntityManagerFactory(Persistence.java:39)
    at at.swingtodo.SwingTodo.main(SwingTodo.java:39)
Caused by: java.lang.ClassNotFoundException: org.jboss.jandex.IndexView
    at java.net.URLClassLoader$1.run(URLClassLoader.java:366)
    at java.net.URLClassLoader$1.run(URLClassLoader.java:355)
    at java.security.AccessController.doPrivileged(Native Method)
    at java.net.URLClassLoader.findClass(URLClassLoader.java:354)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:425)
    at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:308)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:358)
    ... 10 more
Java Result: 1
持久化单元在src/META-INF/persistence.xml中配置如下:

<?xml version="1.0" encoding="UTF-8"?>
<persistence version="2.0" xmlns="http://java.sun.com/xml/ns/persistence" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/persistence http://xmlns.jcp.org/xml/ns/persistence/persistence_2_1.xsd">
  <persistence-unit name="SwingTodoPU" transaction-type="RESOURCE_LOCAL">
    <provider>org.hibernate.jpa.HibernatePersistenceProvider</provider>
    <class>at.swingtodo.entities.Item</class>
    <shared-cache-mode>NONE</shared-cache-mode>
    <validation-mode>NONE</validation-mode>
    <properties>
      <property name="hibernate.cache.provider_class" value="org.hibernate.cache.NoCacheProvider"/>
      <property name="javax.persistence.jdbc.url" value="jdbc:mysql://localhost:3306/tododb?zeroDateTimeBehavior=convertToNull"/>
      <property name="javax.persistence.jdbc.password" value="tododb"/>
      <property name="javax.persistence.jdbc.driver" value="com.mysql.jdbc.Driver"/>
      <property name="javax.persistence.jdbc.user" value="tododb"/>
      <property name="javax.persistence.schema-generation.database.action" value="drop-and-create"/>
    </properties>
  </persistence-unit>
</persistence>
我知道Hibernate试图使用Jandex,但我不明白为什么会这样,即使是在我的最小示例中。正如您所看到的,在这个相关问题中,我没有使用元数据生成作为OP。我还无法解决引发异常之前输出的警告。我的代码没有引用org.hibernate.ejb.HibernatePersistence

如果可能的话,我希望避免使用满足Jandex及其依赖性的明显的解决方法


我正在使用Hibernate 4.3、JPA 2.1、JDK 1.7和NetBeans 8.0.2。

我通过创建一个maven项目并导入代码解决了这个问题。Maven引入了额外的依赖项。但我仍然对如何防止Jandex&Co.的装载感兴趣。你最终解决了这个问题吗?我现在在JBoss7.2上的Spring4.0.6上也遇到了同样的问题。我很不愿意将Jandex捆绑到我的lib目录中。这是我最后的办法。谢谢@查理森:不,对不起。这是我本该从事的一个项目的一些专门知识建设的一部分,但当该项目被取消时,我没有继续探讨这个话题。
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE hibernate-configuration PUBLIC "-//Hibernate/Hibernate Configuration DTD 3.0//EN" "http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd">
<hibernate-configuration>
  <session-factory>
    <property name="hibernate.dialect">org.hibernate.dialect.MySQLDialect</property>
    <property name="hibernate.connection.driver_class">com.mysql.jdbc.Driver</property>
    <property name="hibernate.connection.url">jdbc:mysql://localhost:3306/tododb?zeroDateTimeBehavior=convertToNull</property>
    <property name="hibernate.connection.username">tododb</property>
    <property name="hibernate.connection.password">tododb</property>
  </session-factory>
</hibernate-configuration>