web-dev-qa-db-fra.com

Où mettre persistence.xml dans le bocal de bibliothèque en utilisant maven?

Au travail, nous avons une bibliothèque d'entités qui est utilisée par plusieurs clients pour la bibliothèque (plusieurs servlets, une application de bureau, etc.). La bibliothèque d'entités se compose de classes annotées JPA et surtout d'un fichier persistence.xml.

Tous les projets sont configurés à l'aide de maven.

Où placer un fichier persistence.xml? Il doit être situé dans le fichier jar de cette bibliothèque d'entités et je ne sais pas comment le configurer à l'aide de maven.

(Nous divisons simplement un projet en plusieurs petits projets)

'' 'UPDATE' '' Pour être clair à ce sujet, il existe un Maven-Project A contenant le persistence.xml et un autre (B) qui dépend de ce projet. J'ai placé persistence.xml dans src/main/resources/META-INF/persistence.xml dans A, lorsque vous essayez d'utiliser un EntityManager dans A, pas de problème, insidie ​​B: rien ne fonctionne.

EclipseLink donne l'avertissement suivant:

[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

Je soupçonne que le fichier persistence.xml est introuvable, mais il est présent dans le pot cible.

37
scravy

Comme @Dave le mentionne ci-dessus src/main/resources est l'endroit. Quand cela vient à persistence.xml il doit être placé dans le META-INF dossier. Donc pour conclure: src/main/resources/META-INF/persistence.xml.

77
maba

Je n'ai obtenu que persistence.xml pour travailler dans mon WAR lorsqu'il est placé dans WEB-INF/classes/META-INF, tout comme la documentation le conseille:

http://docs.Oracle.com/cd/E19159-01/819-3669/bnbrj/index.html indique ce qui suit:

Si vous empaquetez l'unité de persistance en tant qu'ensemble de classes dans un fichier WAR , persistence.xml doit se trouver dans le fichier WAR Répertoire WEB-INF/classes/META-INF .

Dans mes accessoires de projet Eclipse, j'ai ajouté ceci au chemin de génération:

src\main\resources

Mon projet Maven a persistence.xml à l'emplacement suivant:

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

Après avoir exécuté Maven clean install, un WAR est construit avec:

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

Lorsque je dépose cette WAR dans le dossier webapps de Tomcat 7, elle est déployée correctement et JPA fonctionne.

12
J Slick

Les fichiers de configuration XML appartiennent presque toujours à src/main/resources, dans une hiérarchie de packages (tout comme Java). Ces fichiers seront copiés dans l'artefact dans la même hiérarchie.

5
Dave Newton

Dans le fichier maven pom.xml, vous devez ajouter le répertoire des ressources, vous n'avez donc pas à l'ajouter manuellement au chemin de génération dans Eclipse.

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

voir: http://maven.Apache.org/plugins/maven-resources-plugin/examples/resource-directory.html

2
eeezyy