職場では、ライブラリのいくつかのクライアント(いくつかのサーブレット、デスクトップアプリケーションなど)によって使用されるエンティティライブラリがあります。エンティティライブラリは、JPAアノテーションが付けられたクラスで構成され、最も顕著なのはpersistence.xmlです。
すべてのプロジェクトは、mavenを使用して構成されます。
Persistence.xmlファイルはどこに置くべきですか?そのエンティティライブラリのjarファイル内に配置する必要があり、mavenを使用してこれを構成する方法がわかりません。
(プロジェクトをいくつかの小さなプロジェクトに分割しています)
'' '更新' ''これを明確にするために、persistence.xmlを含む1つのMaven-Project Aと、そのプロジェクトに依存する別のMaven-Project A(B)があります。 AでEntityManagerを使用しようとすると、Aのsrc/main/resources/META-INF/persistence.xmlにpersistence.xmlを配置しました。
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に存在します。
@Daveが上で述べたように、src/main/resources
は場所です。 persistence.xml
になると、META-INF
フォルダーに配置する必要があります。結論として:src/main/resources/META-INF/persistence.xml
。
ドキュメントがアドバイスするように、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が機能します。
XML構成ファイルは、ほとんどの場合、パッケージ階層内のsrc/main/resources
に属します(Javaソースファイル)と同じです。これらのファイルは、同じ階層のアーティファクトにコピーされます。
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