在哪里使用maven将persistence.xml放在库jar中?

时间:2012-06-03 14:23:16

标签: java maven jpa jar persistence.xml

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

使用maven配置所有项目。

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

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

'''更新'''要清楚这一点,有一个Maven-Project A包含persistence.xml,另一个(B)依赖于该Project。我把persistence.xml放在A中的src / main / resources / META-INF / persistence.xml中,当试图在A里面使用一个EntityManager时没问题,insidie 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中。

5 个答案:

答案 0 :(得分:77)

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

答案 1 :(得分:12)

当我放置在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正常工作。

答案 2 :(得分:5)

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

答案 3 :(得分:2)

在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

答案 4 :(得分:0)

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

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

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

关键是,我试图从 Eclipse 内部将项目作为 Java 应用程序运行(您知道,从具有公共静态 main(String [] args) 方法的主类)并且运行时日志一直显示 {{1}即使它在提到的正确文件夹中,也无法找到。

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