【发布时间】:2011-03-09 09:36:33
【问题描述】:
使用mvn install 命令将我的项目安装到本地存储库时,休眠映射文件会从生成的JAR 中排除。
我在 src/main/resources/traffic_domain/mapping/ 下有 *.hbm.xml 文件,所以应该没问题,因为它遵循标准目录布局对于 Maven。
我的 POM 文件如下所示:
<project>
<modelVersion>4.0.0</modelVersion>
<groupId>masters.traffic</groupId>
<artifactId>traffic_domain</artifactId>
<packaging>jar</packaging>
<name>traffic_domain</name>
<version>0.1.0</version>
<build>
<sourceDirectory>src</sourceDirectory>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<configuration>
<source>1.6</source>
<target>1.6</target>
</configuration>
</plugin>
</plugins>
</build>
...
</project>
目录结构如下:
traffic_domain
|-- pom.xml
|-- src
|-- main
|-- java
|-- ...
|-- resources
|-- traffic_domain
|-- mapping
|-- Access.hbm.xml
|-- *.hbm.xml
traffic_domain.jar 是我的 Web 应用程序 运行所需的 JAR 之一。在启动 tomcat 时,我遇到了这样的异常:
原因: org.hibernate.MappingNotFoundException: 资源: 主/资源/traffic_domain/mapping/Access.hbm.xml 找不到...
如何解决?
更新:好的(广告。Pascal Thivent评论),就是调用mvn clean package后生成的JAR内容:
c:\Users\jwa\Desktop\tets\traffic_domain\target>jar xvf traffic_domain-0.1.0.jar
created: META-INF/
inflated: META-INF/MANIFEST.MF
created: main/
created: main/java/
created: main/java/traffic_domain/
created: main/java/traffic_domain/bean/
created: main/java/traffic_domain/logic/
created: main/java/traffic_domain/tools/
inflated: Access.hbm.xml
inflated: District.hbm.xml
inflated: main/java/traffic_domain/bean/Access.class
inflated: main/java/traffic_domain/bean/District.class
inflated: main/java/traffic_domain/bean/PostalCode.class
inflated: main/java/traffic_domain/bean/Street.class
inflated: main/java/traffic_domain/bean/TrafficCondition.class
inflated: main/java/traffic_domain/logic/AccessFacade.class
inflated: main/java/traffic_domain/logic/LocationFacade.class
inflated: main/java/traffic_domain/logic/TrafficConditionFacade.class
inflated: main/java/traffic_domain/tools/HibernateUtil.class
inflated: PostalCode.hbm.xml
inflated: Street.hbm.xml
inflated: TrafficCondition.hbm.xml
created: META-INF/maven/
created: META-INF/maven/masters.traffic/
created: META-INF/maven/masters.traffic/traffic_domain/
inflated: META-INF/maven/masters.traffic/traffic_domain/pom.xml
inflated: META-INF/maven/masters.traffic/traffic_domain/pom.properties
为了比较,这里是 Eclipce 创建的那个 JAR 的内容,它正在工作:
C:\Users\jwa\Desktop\correct>jar xvf traffic_domain.jar
inflated: main/java/traffic_domain/bean/PostalCode.class
inflated: traffic_domain/mapping/Access.hbm.xml
created: main/resources/
created: main/resources/traffic_domain/
inflated: traffic_domain/mapping/Street.hbm.xml
inflated: main/java/traffic_domain/logic/AccessFacade.class
inflated: main/resources/traffic_domain/mapping/TrafficCondition.hbm.xml
inflated: traffic_domain/mapping/PostalCode.hbm.xml
created: main/java/traffic_domain/bean/
inflated: main/java/traffic_domain/tools/HibernateUtil.class
created: main/
inflated: main/java/traffic_domain/bean/TrafficCondition.class
inflated: mapping/Street.hbm.xml
inflated: PostalCode.hbm.xml
inflated: main/java/traffic_domain/bean/Access.class
created: traffic_domain/mapping/
inflated: District.hbm.xml
created: traffic_domain/
inflated: traffic_domain/mapping/TrafficCondition.hbm.xml
created: main/java/traffic_domain/tools/
inflated: Access.hbm.xml
inflated: traffic_domain/mapping/District.hbm.xml
created: main/java/traffic_domain/logic/
created: mapping/
created: main/resources/traffic_domain/mapping/
inflated: mapping/TrafficCondition.hbm.xml
inflated: main/resources/traffic_domain/mapping/Access.hbm.xml
inflated: mapping/Access.hbm.xml
inflated: main/java/traffic_domain/bean/Street.class
created: main/java/
inflated: main/java/traffic_domain/logic/TrafficConditionFacade.class
inflated: main/resources/traffic_domain/mapping/PostalCode.hbm.xml
created: main/java/traffic_domain/
inflated: TrafficCondition.hbm.xml
inflated: main/resources/traffic_domain/mapping/District.hbm.xml
inflated: mapping/PostalCode.hbm.xml
inflated: Street.hbm.xml
inflated: main/resources/traffic_domain/mapping/Street.hbm.xml
inflated: main/java/traffic_domain/logic/LocationFacade.class
inflated: main/java/traffic_domain/bean/District.class
inflated: mapping/District.hbm.xml
这是 hibernate.cfg.xml 的一部分,它正在加载映射(在 axtavt 建议之后更改):
<mapping resource="traffic_domain/mapping/Access.hbm.xml"/>
<mapping resource="traffic_domain/mapping/Street.hbm.xml"/>
<mapping resource="traffic_domain/mapping/District.hbm.xml"/>
<mapping resource="traffic_domain/mapping/PostalCode.hbm.xml"/>
<mapping resource="traffic_domain/mapping/TrafficCondition.hbm.xml"/>
【问题讨论】:
-
“我在 src/main/resources/traffic_domain/mapping/ 下有 *.hbm.xml 文件,所以应该没问题,因为它遵循 maven 的标准目录布局。”如果您知道您使用的是标准的 maven 目录结构,为什么要在 pom.xml 中明确指定您的源目录?正如 Pascal 已经提到的,删除
元素肯定会解决问题。 -
大家好,最后我把我的 3 个项目中的所有东西都改成了标准的 maven 目录布局。说到 m2eclipse,其实我之前一直在使用 m2eclipse,但我并没有像应该使用的那样正确使用它。现在我已经学会了如何使用它。现在好了,我在 *.jar 文件中没有垃圾,目录结构还可以,我认为一切都是正确的。再次感谢。