2011-01-12 11 views
2

私は私が私の特別なMavenのパッケージ(#1)にしたいいくつかのデザインパターン、持っている...JPAを使用してMavenパッケージを作成する方法は、サービスプロバイダとは関係ありません。このパッケージのユーザーがサービスプロバイダをプラグインする方法は?

それも可能だかはわからない - これらすべてのパターンがのjavax.persistenceを使用します。私は、このパッケージがHibernateやJPAの他の実装に依存することを望んでいません。 JCPによって定義されているように、JPA APIに依存するだけです。 2番目のMavenパッケージ(#2)は、この最初のMavenパッケージ(#2)を使用して、使用するJPA実装を指定します(fe.Hibernate)。

これらのパッケージの両方にpom.xmlを定義するにはどうしたらいいですか?(#2パッケージのJPA実装者をHibernateにします)

+0

あなたにはどのような課題がありますか?プロジェクトに必要なpom内の依存関係のみを宣言します。だから、JPAだけでパッケージ(#1)で休止していないでしょう。 – Raghuram

答えて

3

JPAは、javax.persistenceというパッケージを定義しています。アノテーション、インタフェースなどが含まれています。このパッケージは完全にプロバイダに依存しません。 JPAに基づいてプロバイダ独立サービスを実装するために必要なすべてのものが含まれているはずです。

必要なのは、Mavenモジュール#1にMavenアーティファクトを含むjavax.persistenceに依存関係を置くことだけです。

このjavax.persistenceパッケージを含むいくつかのオブジェクトがあります。たとえば:あなたのMavenモジュール#2では

<dependency> 
    <!-- JPA 1.0 --> 
    <groupId>javax.persistence</groupId> 
    <artifactId>persistence-api</artifactId> 
    <version>1.0</version> 
</dependency> 


<dependency> 
    <!-- JPA 2.0 --> 
    <groupId>org.eclipse.persistence</groupId> 
    <artifactId>javax.persistence</artifactId> 
    <version>2.0.0</version> 
</dependency> 

は、あなたが使用したい(例えば、Hibernate用)のJPAプロバイダに#1をモジュールへの依存性と依存関係を配置する必要があります。 (使用しているプロバイダがjavax.persistenceパッケージに他の依存関係を使用している場合は、そのうちの1つを除外する必要があります)。

1

Hibernateをコンパイルパスに入れないことを前提にしていますベンダー固有の拡張機能を使用して)、最終的な成果物にパッケージ化したい場合は、JPA実装を定義するときに<scope>runtime</scope>を使用する必要があります。

関連する問題