Maven设置将src/main/java下的xml编译到classpath

这几天敲一个Hibernate的Demo,使用的是Hibernate.5.2.10.Final,发现了下面的一个错误,找不到Person.hbm.xml文件,原因是把Person.hbm.xml放到了实体类相同路径下,编译后找不到。

Exception in thread "main" org.hibernate.boot.MappingNotFoundException: Mapping (RESOURCE) not found : com/yasmine/hibernate/create/Person.hbm.xml : origin(com/yasmine/hibernate/create/Person.hbm.xml)
	at org.hibernate.boot.spi.XmlMappingBinderAccess.bind(XmlMappingBinderAccess.java:56)
	at org.hibernate.boot.MetadataSources.addResource(MetadataSources.java:274)
	at org.hibernate.boot.cfgxml.spi.MappingReference.apply(MappingReference.java:70)
	at org.hibernate.boot.internal.MetadataBuilderImpl.build(MetadataBuilderImpl.java:413)
	at org.hibernate.boot.internal.MetadataBuilderImpl.build(MetadataBuilderImpl.java:87)
	at org.hibernate.boot.MetadataSources.buildMetadata(MetadataSources.java:179)
	at com.yasmine.hibernate.create.ExportTable.main(ExportTable.java:24)
	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
	at java.lang.reflect.Method.invoke(Method.java:483)
	at com.intellij.rt.execution.application.AppMain.main(AppMain.java:144)

Maven项目创建时,默认会在src/main路径下创建两个文件夹,一个是java,一个是resources。当进行编译时,Maven默认识别java路径下的.java文件,将其编译到classpath下为.class文件。同样也会将resources下的资源文件,编译到classpath下,不管是xml文件还是properties文件。所有的这些文件都会放在target文件夹下。

这时候要是能在classpath下读到xml映射文件,除了将xml文件放到resources路径下,就是设置Maven相应功能,将java路径下的xml文件也编译到classpath中。因为在Hibernate中映射文件是对应对象模型中的实体的,所以我选择了添加相应的Maven设置,将映射文件放到和实体相同路径下,然后再编译到classpath中。如下所示,在pom文件中添加以下代码:

<build>
    <resources>
        <resource>
            <directory>src/main/java</directory>
            <includes>
                <include>**/*.xml</include>
            </includes>
        </resource>
    </resources>
</build>

上面代码的意思是,设置资源文件的位置,包括src/main/java,并包含其中所有路径下的所有xml文件。

经验分享 程序员 微信小程序 职场和发展