我正在审查一个旧项目的 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/