Where to put persistence.xml in library jar using

2019-02-01 05:10发布

At work we have an entity library which is used by several clients for the library (several servlets, a desktop application, etc.). The entity library consists of JPA-Annotated classes and most prominently a persistence.xml.

All projects are configured using maven.

Where should a persistence.xml file be put? It needs to be located inside the jar file of that entity library and I'm not sure how to configure this using maven.

(We are just splitting up a project into several smaller projects)

'''UPDATE''' To be clear about this, there is one Maven-Project A containing the persistence.xml and another one (B) which depends on that Project. I've places persistence.xml in src/main/resources/META-INF/persistence.xml in A, when trying to use an EntityManager inside A, no problem, insidie B: nothing works.

EclipseLink gives the following Warning:

[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

I suspect the persistence.xml is not found, but it is present in the target jar.

4条回答
该账号已被封号
2楼-- · 2019-02-01 05:20

As @Dave mentions above src/main/resources is the place. When it comes to persistence.xml it should be placed in the META-INF folder. So to conclude: src/main/resources/META-INF/persistence.xml.

查看更多
时光不老,我们不散
3楼-- · 2019-02-01 05:24

In the maven pom.xml file you have to add the resource directory, so you don't have to add it to the build-path in eclipse manually.

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

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

查看更多
Emotional °昔
4楼-- · 2019-02-01 05:28

I have only gotten persistence.xml to work in my WAR when placed at WEB-INF/classes/META-INF, just as the documentation advises:

http://docs.oracle.com/cd/E19159-01/819-3669/bnbrj/index.html states the following:

If you package the persistence unit as a set of classes in a WAR file, persistence.xml should be located in the WAR file’s WEB-INF/classes/META-INF directory.

In my Eclipse project props, I added this to the build path:

src\main\resources

My Maven project has persistence.xml at the following location:

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

After running Maven clean install, a WAR is built with:

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

When I drop this WAR into Tomcat 7's webapps folder, it is deployed properly and JPA works.

查看更多
beautiful°
5楼-- · 2019-02-01 05:30

XML configuration files almost always belong in src/main/resources, in a package hierarchy (just like Java source files). Those files will be copied into the artifact in the same hierarchy.

查看更多
登录 后发表回答