Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/381.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如果Hibernate4.2的Maven POM将jandex和classmate定义为测试范围,那么为什么Hibernate4.2要使用jandex和classmate呢?_Java_Hibernate_Classmate - Fatal编程技术网

Java 如果Hibernate4.2的Maven POM将jandex和classmate定义为测试范围,那么为什么Hibernate4.2要使用jandex和classmate呢?

Java 如果Hibernate4.2的Maven POM将jandex和classmate定义为测试范围,那么为什么Hibernate4.2要使用jandex和classmate呢?,java,hibernate,classmate,Java,Hibernate,Classmate,我正在开发一个简单的Hibernate示例,在任何容器之外使用它。我使用的是Maven,因此配置了JBoss存储库(请参阅),并将以下依赖项添加到项目的POM中: <dependency> <groupId>org.hibernate</groupId> <artifactId>hibernate-core</artifactId> <version>4.2.0.CR1</version>

我正在开发一个简单的Hibernate示例,在任何容器之外使用它。我使用的是Maven,因此配置了JBoss存储库(请参阅),并将以下依赖项添加到项目的POM中:

<dependency>
    <groupId>org.hibernate</groupId>
    <artifactId>hibernate-core</artifactId>
    <version>4.2.0.CR1</version>
</dependency>
<dependency>
    <groupId>com.h2database</groupId>
    <artifactId>h2</artifactId>
    <version>1.3.170</version>
</dependency>
最后,我创建了一个类,该类获得一个会话工厂、一个会话并最终持久化一个实体。代码如下:

@Entity
public class Contact {
    @Id
    @GeneratedValue(strategy = GenerationType.AUTO)
    private Long id;

    @Basic
    private String name;

    @Basic
    private String email;

    /* Getters and setters omitted for brevity. */
}
    ServiceRegistry registry = new ServiceRegistryBuilder().configure().buildServiceRegistry();
    MetadataSources sources = new MetadataSources(registry);
    sources.addAnnotatedClass(Contact.class);
    Metadata metadata = sources.buildMetadata();
    sessionFactory = metadata.buildSessionFactory();

    Contact contact = new Contact();
    /* Set some attributes. */

    Session session = sessionFactory.openSession();
    session.save(contact);
    session.close();
当我运行此代码时,我得到的是:

Exception in thread "main" java.lang.NoClassDefFoundError: org/jboss/jandex/Indexer
    at org.hibernate.metamodel.source.annotations.AnnotationMetadataSourceProcessorImpl.prepare(AnnotationMetadataSourceProcessorImpl.java:78)
    at org.hibernate.metamodel.source.internal.MetadataImpl.prepare(MetadataImpl.java:177)
    at org.hibernate.metamodel.source.internal.MetadataImpl.<init>(MetadataImpl.java:162)
    at org.hibernate.metamodel.source.internal.MetadataBuilderImpl.buildMetadata(MetadataBuilderImpl.java:83)
    at org.hibernate.metamodel.MetadataSources.buildMetadata(MetadataSources.java:112)
线程“main”java.lang.NoClassDefFoundError中的异常:org/jboss/jandex/Indexer 位于org.hibernate.metamodel.source.annotations.AnnotationMetadataSourceProcessorImpl.prepare(AnnotationMetadataSourceProcessorImpl.java:78) 位于org.hibernate.metamodel.source.internal.MetadataImpl.prepare(MetadataImpl.java:177) 位于org.hibernate.metamodel.source.internal.MetadataImpl.(MetadataImpl.java:162) 位于org.hibernate.metamodel.source.internal.MetadataBuilderImpl.buildMetadata(MetadataBuilderImpl.java:83) 位于org.hibernate.metamodel.MetadataSources.buildMetadata(MetadataSources.java:112) 调查我添加到我的项目中的
org.hibernate/hibernate core
依赖项的POM,我可以看到它依赖于
org.jboss/jandex 1.0.3.Final
。为了满足这种依赖性,我现在得到了一个
NoClassDefFoundError:com/fasterxml/classmate/TypeResolver
。回到Hibernate的POM,它依赖于
com.fasterxml/classmate 0.5.4
。在我的项目中,为了满足这种依赖性,我最终能够在没有任何
NoClassDefFoundError
s的情况下执行代码

在Hibernate的POM中,jandex和classmate都被定义为
test
依赖项,这就是为什么Maven的可传递依赖项解析特性不会自动将它们添加到我的项目中。但是,为什么在我运行简单代码时需要它们?我做错了什么

提前感谢您的指点。
-Vitor和Jandex和Classmate不是主要Hibernate功能所必需的。但是,元数据生成()需要它们。为了不破坏不使用元数据生成的人的工作,他们将依赖项添加为测试依赖项。如果使用元数据生成,则需要获取这些依赖项。

谢谢。那么,我将把依赖项保存在pom.xml中。
Exception in thread "main" java.lang.NoClassDefFoundError: org/jboss/jandex/Indexer
    at org.hibernate.metamodel.source.annotations.AnnotationMetadataSourceProcessorImpl.prepare(AnnotationMetadataSourceProcessorImpl.java:78)
    at org.hibernate.metamodel.source.internal.MetadataImpl.prepare(MetadataImpl.java:177)
    at org.hibernate.metamodel.source.internal.MetadataImpl.<init>(MetadataImpl.java:162)
    at org.hibernate.metamodel.source.internal.MetadataBuilderImpl.buildMetadata(MetadataBuilderImpl.java:83)
    at org.hibernate.metamodel.MetadataSources.buildMetadata(MetadataSources.java:112)