0

我正在审查我试图在 Jboss AS 7.1.1 上运行的旧项目的 pom.xml。这个 pom 包含很多依赖项,其中包含以下工件:

  • 休眠核心
  • 休眠验证器
  • hibernate-jpa-2.0-api
  • 休眠实体管理器
  • ...

由于 Jboss 7.1.1 有一个模块org.hibernate,我设法删除了这些依赖项,除了通过以下内容hibernate-core创建:\META-INF\jboss-deployment-structure.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 文件中排除

4

1 回答 1

1

而不是 jboss-deployment-structure.xml 如果您在项目中使用 maven 更好地提供休眠和支持的模块作为清单条目。您可以通过以下 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>

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

<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>
于 2015-06-10T14:35:39.987 回答