39

在工作中,我们有一个实体库,供多个客户端用于该库(几个 servlet、一个桌面应用程序等)。实体库由 JPA-Annotated 类和最显着的persistence.xml 组成。

所有项目均使用 maven 进行配置。

persistence.xml 文件应该放在哪里?它需要位于该实体库的 jar 文件中,我不确定如何使用 maven 进行配置。

(我们只是将一个项目拆分为几个较小的项目)

'''UPDATE''' 为了清楚这一点,有一个 Maven-Project A 包含 persistence.xml 和另一个 (B) 依赖于该项目。当我尝试在 A 中使用 EntityManager 时,我已将 persistence.xml 放在 A 中的 src/main/resources/META-INF/persistence.xml 中,没问题,insdie B:没有任何效果。

EclipseLink 给出以下警告:

[EL Warning]: The collection of metamodel types is empty. Model classes may not have been found during entity search for Java SE and some Java EE container managed persistence units.  Please verify that your entity classes are referenced in persistence.xml using either <class> elements or a global <exclude-unlisted-classes>false</exclude-unlisted-classes> element

我怀疑没有找到 persistence.xml,但它存在于目标 jar 中。

4

5 回答 5

85

正如@Dave 上面提到的那样,src/main/resources就是这个地方。说到persistence.xml它应该放在META-INF文件夹里。所以得出结论:src/main/resources/META-INF/persistence.xml

于 2012-06-04T08:06:39.673 回答
14

正如文档所建议的那样,当放置在 WEB-INF/classes/META-INF 时,我只得到了 persistence.xml 在我的 WAR 中工作:

http://docs.oracle.com/cd/E19159-01/819-3669/bnbrj/index.html声明如下:

如果将持久性单元打包为 WAR 文件中的一组类,那么persistence.xml 应该位于 WAR 文件的WEB-INF/classes/META-INF目录中。

在我的 Eclipse 项目道具中,我将其添加到构建路径中:

src\main\resources

我的 Maven 项目在以下位置有 persistence.xml:

src\main\resources\META-INF\persistence.xml

运行后Maven clean install,将使用以下内容构建 WAR:

WEB-INF\classes\META-INF\persistence.xml

当我将此 WAR 放入 Tomcat 7 的 webapps 文件夹时,它已正确部署并且 JPA 可以正常工作。

于 2013-09-07T05:53:48.800 回答
5

XML 配置文件几乎总是属于src/main/resources, 在包层次结构中(就像 Java 源文件一样)。这些文件将被复制到同一层次结构中的工件中。

于 2012-06-03T14:26:09.260 回答
3

在 maven pom.xml 文件中,您必须添加资源目录,因此您不必手动将其添加到 eclipse 中的构建路径中。

<project>
  ...
  <build>
    ...
    <resources>
      <resource>
        <directory>src/resources</directory>
      </resource>
    </resources>
    ...
  </build>
  ...
</project>

见:http ://maven.apache.org/plugins/maven-resources-plugin/examples/resource-directory.html

于 2013-12-18T00:09:42.913 回答
0

只是提到我遇到的一个类似问题,它一直让我想到这个问题,所以这可能会帮助像我一样不太熟悉 Maven 的其他人。

我在 Eclipse 中有一个独立的 Java SE Maven 项目,该项目具有hibernate-hikaricp依赖项,并且我在文件夹中正确添加了一个persistence.xml文件,该<project_name>/src/main/resources/META-INF文件是此类 JSE 项目的 Maven 默认资源文件夹。

该项目pom.xml包含一个maven-resources-plugin插件,但我不确定是否与该问题有关。

关键是,我试图从 Eclipse 内部将项目作为 Java 应用程序运行(你知道,从具有公共静态main(String [] args)方法的主类)并且运行时日志一直说META-INF/persistence.xml找不到,即使它在提到的,正确的文件夹。

事实证明,我必须重建项目才能将persistence.xml文件重新发送到正确的目标输出文件夹。因此clean,在项目上(我认为根本没有必要,但你知道,我们尝试了一些事情)并build为我解决了这个问题。我从 Eclipse 内部调用它们,但我相信从命令行调用mvn也可以(我可能不得不在之后刷新 Eclipse 项目树以同步内容)。

于 2021-01-31T16:29:05.183 回答