39

職場には、ライブラリの複数のクライアント(いくつかのサーブレット、デスクトップアプリケーションなど)によって使用されるエンティティライブラリがあります。エンティティライブラリは、JPA注釈付きクラスと、最も目立つのはpersistence.xmlで構成されています。

すべてのプロジェクトはMavenを使用して構成されます。

persistence.xmlファイルはどこに置くべきですか?そのエンティティライブラリのjarファイル内に配置する必要があり、mavenを使用してこれを構成する方法がわかりません。

(プロジェクトをいくつかの小さなプロジェクトに分割しているだけです)

'''UPDATE'''これを明確にするために、persistence.xmlを含む1つのMavenプロジェクトAと、そのプロジェクトに依存する別のプロジェクト(B)があります。Aのsrc/main / resources / META-INF / persistence.xmlに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

永続性.xmlが見つからないようですが、ターゲットjarに存在します。

4

5 に答える 5

85

@Daveが上src/main/resourcesで述べたように、その場所です。それに関しては、フォルダpersistence.xmlに配置する必要があります。META-INF結論として:src/main/resources/META-INF/persistence.xml

于 2012-06-04T08:06:39.673 に答える
14

ドキュメントがアドバイスしているように、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をTomcat7のwebappsフォルダーにドロップすると、正しくデプロイされ、JPAが機能します。

于 2013-09-07T05:53:48.800 に答える
5

XML構成ファイルは、ほとんどの場合src/main/resources、パッケージ階層内に属します(Javaソースファイルと同様)。これらのファイルは、同じ階層のアーティファクトにコピーされます。

于 2012-06-03T14:26:09.260 に答える
3

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

于 2013-12-18T00:09:42.913 に答える
0

私が直面した同様の問題に言及するだけで、私はこの質問に持ち込まれました。そのため、これは、私ほどMavenに精通していない他の人に役立つ可能性があります。

Eclipseに依存関係のあるスタンドアロンのJavaSEMavenプロジェクトがあり、そのようなJSEプロジェクトのMavenデフォルトリソースフォルダーであるフォルダー内にファイルをhibernate-hikaricp正しく追加しました。persistence.xml<project_name>/src/main/resources/META-INF

プロジェクトにはプラグインがpom.xml含まれていmaven-resources-pluginますが、問題との関係があるかどうかはわかりません。

重要なのは、Eclipse内からJavaアプリケーションとしてプロジェクトを実行しようとしていたことです(パブリック静的main(String [] args)メソッドを使用するメインクラスから)。前述のように、ランタイムログMETA-INF/persistence.xmlが見つかりませんでした。正しいフォルダ。

persistence.xmlファイルを正しいターゲット出力フォルダーに再送信するには、プロジェクトを再構築する必要があることがわかりました。それでclean、プロジェクトで(私はまったく必要ではないと思いますが、あなたが知っている、私たちは物事を試してみます)、build私のために問題を解決しました。Eclipse内から呼び出しましたが、コマンドラインからの呼び出しmvnも同様に機能したと思います(同期するには、後でEclipseプロジェクトツリーを更新する必要があったでしょう)。

于 2021-01-31T16:29:05.183 に答える