Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/327.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 使用maven将persistence.xml放在库jar的何处?_Java_Maven_Jpa_Jar_Persistence.xml - Fatal编程技术网

Java 使用maven将persistence.xml放在库jar的何处?

Java 使用maven将persistence.xml放在库jar的何处?,java,maven,jpa,jar,persistence.xml,Java,Maven,Jpa,Jar,Persistence.xml,在工作中,我们有一个实体库,该库由多个客户端(多个servlet、一个桌面应用程序等)使用。实体库由JPA注释类和最重要的persistence.xml组成 所有项目都使用maven进行配置 persistence.xml文件应该放在哪里?它需要位于该实体库的jar文件中,我不知道如何使用maven配置它 (我们只是将一个项目拆分为几个较小的项目) ''UPDATE''为了明确这一点,有一个Maven项目A包含persistence.xml,另一个项目(B)依赖于该项目。我已经将persiste

在工作中,我们有一个实体库,该库由多个客户端(多个servlet、一个桌面应用程序等)使用。实体库由JPA注释类和最重要的persistence.xml组成

所有项目都使用maven进行配置

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

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

''UPDATE''为了明确这一点,有一个Maven项目A包含persistence.xml,另一个项目(B)依赖于该项目。我已经将persistence.xml放在A中的src/main/resources/META-INF/persistence.xml中,当尝试在A中使用EntityManager时,没问题,在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
[EL Warning]:元模型类型集合为空。在实体搜索JavaSE和一些JavaEE容器管理的持久化单元时,可能找不到模型类。请验证您的实体类是否在persistence.xml中使用元素或全局false元素引用

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

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

正如上面@Dave提到的
src/main/resources
就是这个地方。当涉及到
persistence.xml时,它应该放在
META-INF
文件夹中。总之:
src/main/resources/META-INF/persistence.xml

我只在WEB-INF/classes/META-INF中使用persistence.xml,正如文档中建议的:

声明如下:

如果将持久性单元打包为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放到Tomcat7的webapps文件夹中时,它被正确地部署并且JPA工作。

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

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

...
...
高级文书主任/资源
...
...

请参阅:

只是提到了我所面临的一个类似问题,这让我不断地提出这个问题,因此这可能会帮助像我这样对Maven不太熟悉的其他人

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

该项目的
pom.xml
包含了一个
maven资源插件
插件,但我不确定是否与该问题有关系

关键是,我试图从Eclipse内部以Java应用程序的形式运行该项目(您知道,从一个带有公共静态
main(String[]args)
方法的主类),运行时日志一直说
META-INF/persistence.xml
无法找到,即使它位于所提到的正确文件夹中


事实证明,为了将
persistence.xml
文件重新发送到正确的目标输出文件夹,我必须重建项目。因此,对项目进行
清理
(我认为这根本没有必要,但你知道,我们尝试了一些东西)和
构建
为我解决了这个问题。我从Eclipse内部调用了它们,但我相信使用
mvn
从命令行调用也会起到作用(我只是可能需要在之后刷新Eclipse项目树以进行同步)。

对我来说非常有效。必须创建一个META-INF文件夹,并将persistence.xml放在其中。@Sorter这里也一样。我只是在学习Hibernate和Maven,还拉着我的头发。很高兴知道这是推荐的方法。:-)NetBeans项目中的src/main/resources在哪里?您应该将它放在
src/main/resources
中,这是maven的默认值,并且是自动添加的。这对我的用例很有帮助,但对所问的问题没有帮助,这是关于组成JAR中的
persistence.xml
文件(可能是WAR),而不是直接在战争中。不过,
WEB-INF/classes/META-INF
技巧非常有用!在这个问题的上下文中,关于包层次结构的注释是不正确的。JPA要求persistence.xml存储在Maven项目中的特定位置,如其他答案中所述。@RobertDean这仍然是正确的速度,而且它仍然会被复制到正确的位置——它是一个“元”包,这与其他答案中所述的相关性不大。耸耸肩不知道为什么一个7岁左右的问题/答案最近引起了注意。