java - Jboss 7.1.1 正确的 hibernate 依赖关系

标签 java hibernate maven jboss jboss-modules

我正在审查一个旧项目的 pom.xml,我试图在 Jboss AS 7.1.1 上运行该项目。这个 pom 包含很多与 Artifact 的依赖关系,例如:

  • hibernate 核心
  • hibernate validator
  • hibernate-jpa-2.0-api
  • hibernate-entitymanager
  • ...

由于 Jboss 7.1.1 有一个模块 org.hibernate,我已经通过创建 \META-INF 设法删除了除 hibernate-core 之外的这些依赖项\jboss-deployment-struct.xml 包含以下内容:

<jboss-deployment-structure xmlns="urn:jboss:deployment-structure:1.0">
    <deployment>
        <dependencies>
            <module name="org.hibernate"/>
        </dependencies>
    </deployment>
</jboss-deployment-structure>

所以为了能够编译 WAR 文件,我需要有这个依赖项

<dependency>
        <groupId>org.hibernate</groupId>
        <artifactId>hibernate-core</artifactId>
        <version>${hibernate.version}</version>
</dependency>

但我不明白为什么我不能使用provided范围来设置它。如果它包含在 org.hibernate 模块中,为什么我不能这样做?如果我将其设置为provided,则会收到以下错误:

Initial SessionFactory creation failed.java.lang.NoClassDefFoundError: org/hibernate/cfg/Configuration

我想用provided范围来设置它,只是为了将其从WAR文件中排除

最佳答案

如果您在项目中使用 maven,则可以更好地提供 hibernate 和支持的模块作为 list 条目,而不是 jboss-deployment-struction.xml。您可以通过以下 pom.xml 中的代码来实现此目的

<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-war-plugin</artifactId>
<configuration>
<archive>
<manifestEntries>
<Dependencies>
org.infinispan,org.hibernate
</Dependencies>
</manifestEntries>
</archive>
</configuration>
</plugin>

然后使用提供的范围添加其他所需的依赖项,以便可以在运行时加载它们,而无需在 war 中捆绑,使用以下示例。

<dependency>
        <groupId>org.hibernate</groupId>
        <artifactId>hibernate-core</artifactId>
        <version>4.0.1.Final</version>
        <scope>provided</scope>
    </dependency> 
    <dependency>
        <groupId>org.hibernate</groupId>
        <artifactId>hibernate-validator</artifactId>
        <version>4.2.0.Final</version>
        <scope>provided</scope>
    </dependency>
   <dependency>
        <groupId>org.hibernate.common</groupId>
        <artifactId>hibernate-commons-annotations</artifactId>
        <version>4.0.1.Final</version>
        <classifier>tests</classifier>
        <scope>provided</scope>
    </dependency>
    <dependency>
        <groupId>org.hibernate.javax.persistence</groupId>
        <artifactId>hibernate-jpa-2.0-api</artifactId>
        <version>1.0.1.Final</version>

    </dependency>
     <dependency>
        <groupId>org.hibernate</groupId>
        <artifactId>hibernate-c3p0</artifactId>
        <version>4.0.1.Final</version>
    </dependency>
    <dependency>
        <groupId>org.hibernate</groupId>
        <artifactId>hibernate-entitymanager</artifactId>
        <version>4.0.1.Final</version>
        <scope>provided</scope>
    </dependency>
    <dependency>
        <groupId>javax.validation</groupId>
        <artifactId>validation-api</artifactId>
        <version>1.0.0.GA</version>
        <scope>provided</scope>
    </dependency>

关于java - Jboss 7.1.1 正确的 hibernate 依赖关系,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30759038/

相关文章:

java - 使用 java -cp 等类路径描述 MANIFEST.MF

java - Maven 安装构建错误 - 依赖项路径

java - 如何获取TimeZone类中的具体时间

xml - 初始 SessionFactory 创建失败。org.hibernate.InvalidMappingException : Unable to read XML

java - 如何将我的通话设置为对其他人保密?

java - Jersey API + JPA/Hibernate Criteria 延迟加载不起作用

java - 如何使用 Hibernate 实现自定义字符串序列标识符生成器

java - Maven 无法下载 jar 依赖项

java - 我如何知道 Vaadin 7.x 中首次创建 session 的时间?

java - 如何为android本地化显示textview动态值