我正在查看我试图在Jboss AS 7.1.1上运行的旧项目的pom.xml。这个pom包含许多与工件的依赖关系,如:
由于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文件中排除
答案 0 :(得分:1)
如果你在项目中使用maven更好地提供hibernate和支持的模块作为清单条目,而不是jboss-deployment-structure.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>
然后使用提供的作用域添加其他所需的依赖项,以便可以在运行时加载它们而不用在战争中捆绑,使用以下示例。
<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>