我最近使用 eclipse(实际上是 myeclipse)通过 new->web 项目向导创建一个新的 Web 项目。项目的默认目录结构如下所示:
src
WebRoot
WebRoot/META-INF
WebRoot/META-INF/MANIFEST.MF
WebRoot/WEB-INF
WebRoot/WEB-INF/lib
WebRoot/WEB-INF/classes (not visible via the Package/Project Explorer)
WebRoot/WEB-INF/web.xml
对于 jpa,我添加了:
WebRoot/META-INF/persistence.xml
对于 Spring ,我添加了:
WebRoot/META-INF/spring/spring-master.xml
当尝试运行一个非常基本的 junit 测试来加载 spring 上下文和 hibernate 实体管理器时,我遇到了类路径问题。最初,为了解决我遇到的第一个类路径问题,当 Spring 找不到我的 spring 配置文件时,我将 WebRoot/META-INF/spring
添加到 junit->Run Configurations 类路径中。
但是当 jpa 找不到我的实体 bean 定义时,我遇到了另一个类路径错误。正在阅读this article (dated 2007)它指出 META-INF/persistence.xml
应包含在 WEB-INF/classes
中,因为 JPA 在 META 的父目录中搜索实体 bean 类文件-INF/persistence.xml
当我复制 META-INF
(通过 Windows 资源管理器,因为 eclipse 隐藏了类目录)并将其所有内容复制到 WEB-INF/classes
时,我的类路径错误消失了(以及需要使用junit运行配置来解决之前的spring不知道我的spring配置文件位于哪里的问题结果我仍然需要将spring文件夹添加到junit类路径中选项)。
但是现在我的配置文件位于 Eclipse 的 Package/Project Explorer 中未显示的文件夹中。
针对这种情况设置 Eclipse 的最佳方法是什么?告诉它以某种方式显示类文件夹?为什么 Eclipse 为 Web 项目创建 META-INF
作为 WEB-INF
的同级?
有没有办法通知 JPA 在默认值以外的地方查找实体类?
感谢您的任何意见!
最佳答案
你应该知道eclipse混合了src
中编译的类和资源(以及任何其他源代码目录)在 <WebRoot>/WEB-INF/classes
中目录。
因此,在 Test 和 Webapp 中访问同一文件(例如 META-INF/persistence.xml)的一种方法是将其放在 src/META-INF/persistence.xml
中。 。然后它可以在 <WebRoot>/WEB-INF/classes/META-INF/persistence.xml
中找到。对于网络应用程序,以及 <classpath>/META-INF/persistence.xml
适用于每个应用程序或测试。
所以我的建议是将通过类路径(persistence.xml、spring.xml)解决的所有内容放在源目录中,然后让 eclipse 完成其余的工作。 - 如果您通过类路径指定资源的位置,那么它对于 webapp、test、app 的工作方式应该相同。
顺便说一句:eclipse可以创建许多源代码目录,您可以使用一个用于普通应用程序类,一个用于类路径相关资源,一个用于测试类。
关于java - 配置 Eclipse Web 项目来测试 Spring/JPA 的理想方法是什么,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5809864/