gpt4 book ai didi

java - mvn install 忽略 hibernate 映射文件

转载 作者:搜寻专家 更新时间:2023-11-01 02:55:05 25 4
gpt4 key购买 nike

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

我在 src/main/resources/traffic_domain/mapping/ 下有 *.hbm.xml 文件,所以它应该没问题,因为它遵循标准目录布局对于专家。

我的 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 时,我遇到了这样的异常:

Caused by: org.hibernate.MappingNotFoundException: resource: main/resources/traffic_domain/mapping/Access.hbm.xml not found at...

如何解决?


更新: 好的(广告。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 中的资源应该在构建过程中被复制到target/classes 中。但正如我在 your previous question 中提到的那样,这里的问题是以下行:

<sourceDirectory>src</sourceDirectory> 

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

所以,正如我在 my answer 中所建议的那样,使用 Maven 的默认值(默认布局,默认配置),尤其是如果您是 Maven 初学者:

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

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


跟进:您的项目还有一些非常错误的地方:main/java 不应该是包名称的一部分,为什么资源最终会出现在 jar 的根部?你能展示最新版本的 POM 吗?

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

不知道你用的是不是m2eclipse ,但这是我的建议。 Eclipse 下的项目设置需要与 Maven 项目设置保持一致,目前还没有。 m2eclipse 可以通过从 POM 派生设置来为您做到这一点。

关于java - mvn install 忽略 hibernate 映射文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3137056/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com