首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >mvn安装忽略hibernate映射文件。

mvn安装忽略hibernate映射文件。
EN

Stack Overflow用户
提问于 2010-06-29 00:20:32
回答 3查看 5.1K关注 0票数 4

当使用mvn install命令将我的项目安装到本地存储库时,hibernate映射文件被排除在生成的JAR之外。

我在src/main/resources/traffic_domain/mapping/,下有*.hbm.xml文件,所以它应该是正常的,因为它遵循maven的标准目录布局。

我的POM文件看起来是这样的:

代码语言:javascript
复制
<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>

目录结构如下:

代码语言:javascript
复制
traffic_domain
|-- pom.xml
|-- src
    |-- main
        |-- java
            |-- ...
        |-- resources
            |-- traffic_domain
                |-- mapping
                    |-- Access.hbm.xml
                    |-- *.hbm.xml

traffic_domain.jar是我的web应用程序运行所需的JAR之一。在启动tomcat时,我得到了这样的例外:

由: main/resources/traffic_domain/mapping/Access.hbm.xml : org.hibernate.MappingNotFoundException: resource:未找到

怎么解决这个问题?

更新: Ok (广告)Pascal 注释),即调用mvn clean package后生成的JAR的内容。

代码语言:javascript
复制
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

代码语言:javascript
复制
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通知之后更改):

代码语言:javascript
复制
<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"/>
EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2010-06-29 13:32:47

默认中,应该在构建过程中将来自src/main/resources的资源复制到target/classes中。但是,正如我在你之前的问题中提到的,这里的问题是下面一行:

代码语言:javascript
复制
<sourceDirectory>src</sourceDirectory> 

由于这一行,Maven正在考虑将src下的所有内容作为源,并将main/resources复制到target/classes中。因此,当您使用“默认布局”时,仍然没有使用Maven的默认配置,而不是将src/main/resources的内容复制到target/classes中,而是包含了main/resources

因此,正如我在我的回答中建议的那样,使用Maven的默认值(默认布局、默认配置),特别是如果您是Maven初学者:

  • 将您的Java源移动到src/main/java中(并删除sourceDirectory元素)

我不知道在Eclipse下事情是如何运作的..。但是你的POM显然是不正确的。

后续:您的项目仍然有一些非常错误的地方:main/java不应该是包名的一部分,为什么资源最终会出现在jar的根上呢?你能给我看一下最新版本的POM吗?

关于Eclipse生成的jar,它可能正在工作,但当我看到它时,我看到的唯一东西是一个大混乱的(重复的文件,错误的打包等等)。但是,这可能是由于Maven项目设置和Eclipse项目设置之间的差异造成的。

我不知道你是否在使用m2eclipse,但这将是我的建议。Eclipse下的项目设置需要与Maven项目设置对齐,但目前并非如此。m2eclipse可以通过从POM派生设置来实现这一点。

票数 3
EN

Stack Overflow用户

发布于 2012-04-19 14:38:18

如果需要在阶段编译中包括*.hbm.xml,请编辑pom.xml并添加下一段代码:

代码语言:javascript
复制
<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>
票数 1
EN

Stack Overflow用户

发布于 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中指定了映射文件的错误路径。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/3137056

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档