当使用mvn install命令将我的项目安装到本地存储库时,hibernate映射文件被排除在生成的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.xmltraffic_domain.jar是我的web应用程序运行所需的JAR之一。在启动tomcat时,我得到了这样的例外:
由: main/resources/traffic_domain/mapping/Access.hbm.xml : org.hibernate.MappingNotFoundException: resource:未找到
怎么解决这个问题?
更新: Ok (广告)Pascal 注释),即调用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的内容,它是working
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"/>发布于 2010-06-29 13:32:47
在默认中,应该在构建过程中将来自src/main/resources的资源复制到target/classes中。但是,正如我在你之前的问题中提到的,这里的问题是下面一行:
<sourceDirectory>src</sourceDirectory> 由于这一行,Maven正在考虑将src下的所有内容作为源,并将main/resources复制到target/classes中。因此,当您使用“默认布局”时,仍然没有使用Maven的默认配置,而不是将src/main/resources的内容复制到target/classes中,而是包含了main/resources。
因此,正如我在我的回答中建议的那样,使用Maven的默认值(默认布局、默认配置),特别是如果您是Maven初学者:
src/main/java中(并删除sourceDirectory元素)我不知道在Eclipse下事情是如何运作的..。但是你的POM显然是不正确的。
后续:您的项目仍然有一些非常错误的地方:main/java不应该是包名的一部分,为什么资源最终会出现在jar的根上呢?你能给我看一下最新版本的POM吗?
关于Eclipse生成的jar,它可能正在工作,但当我看到它时,我看到的唯一东西是一个大混乱的(重复的文件,错误的打包等等)。但是,这可能是由于Maven项目设置和Eclipse项目设置之间的差异造成的。
我不知道你是否在使用m2eclipse,但这将是我的建议。Eclipse下的项目设置需要与Maven项目设置对齐,但目前并非如此。m2eclipse可以通过从POM派生设置来实现这一点。
发布于 2012-04-19 14:38:18
如果需要在阶段编译中包括*.hbm.xml,请编辑pom.xml并添加下一段代码:
<build>
<resources>
<resource>
<directory>source/com/qfund/orm/</directory>
<targetPath>com/qfund/orm/</targetPath>
<includes>
<include>*.hbm.xml</include>
</includes>
</resource>
</resources>
<testResources>
<testResource>
<directory>src/test/java/</directory>
<includes>
<include>*.xml</include>
<include>*.xsd</include>
<include>*.xslt</include>
<include>*.properties</include>
</includes>
</testResource>
</testResources>
</build>发布于 2010-06-29 10:02:20
看看例外情况:
由: main/resources/traffic_domain/mapping/Access.hbm.xml : org.hibernate.MappingNotFoundException: resource:未找到
Hibernate试图在main/resources/traffic_domain/mapping/Access.hbm.xml中找到映射文件,而此时应该以traffic_domain/mapping/Access.hbm.xml的形式访问它。可能您在.cfg.xml中指定了映射文件的错误路径。
https://stackoverflow.com/questions/3137056
复制相似问题