7

私たちはJPAと協力しており、標準仕様に固執しようとしています(そしてHibernate固有の機能を避けています)。

Maven の依存関係として、別のプロジェクト (A) 内で 1 つのプロジェクト (X と呼びましょう) を使用します。

プロジェクト X のエンティティをスキャンし、プロジェクト A をスキャンするには、JPA が必要です。

そのために、行を追加しました

<jar-file>lib/X-v5-4.0.jar</jar-file>

中身

<persistence-unit>

persistence.xml で。これはうまくいきます。

まだ残っている問題は、プロジェクト X のバージョンを pom.xml だけでなく persistence.xml でも指定する必要があることです。これは、将来の展開に関する問題のレシピです。

Maven リソース フィルタリングを使用するシステムを考え出しました。

<jar-file>lib/X-v5-${x-version}.jar</jar-file>

persistence.xml および

<properties>
  <x-version>4.0</x-version>
</properties>

および pom.xml の ${x-version}。

これは機能しますが、プロジェクト X が新しいバージョンを取得するたびに、非標準の場所でバージョン番号を更新することを覚えておく必要があるため、まだ完全ではありません。

理想的には、pom.xml の依存関係部分でバージョン情報を調整でき、変更が persistence.xml に自動的に反映される状況が望ましいと考えています。この方法で、将来の展開で発生する可能性のある多くのエラーを減らすことができます。

これは可能ですか?

編集(私たちの解決策):

jpa.xml という名前のファイルを追加しました。その中で、entityManagerFactory、persistenceAnnotationBeanPostProcessor、および transactionManager を定義します。ここで重要な部分は、entityManagerFactory Bean です。永続化コンテキストに配置するエンティティをスキャンする特定のパッケージを指定できるプロパティ「packagesToScan」があります。

コード スニペット:

<bean id="entityManagerFactory"
    class="org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean">
    <property name="dataSource" ref="jpaDataSource" />
    <property name="loadTimeWeaver">
        <bean
            class="org.springframework.instrument.classloading.InstrumentationLoadTimeWeaver" />
    </property>
    <property name="packagesToScan">
        <list>
            <value>org.com.our.external.library.package1</value>
            <value>org.com.our.external.library.package2</value>
            <value>org.com.our.external.library.package3</value>
        </list>
    </property>
</bean>

利点がわかるはずです。これらのライブラリをパッケージ シグネチャで参照しているため、jar のバージョン番号を気にする必要がなくなりました。

4

2 に答える 2

0

単体テストを追加してjar-file、期待どおりの bypersistence.xmlが実際に配置されていることを確認することをお勧めしますか?

persistence.xmlからバージョン番号を取得することはできませんdependency

dependency.version逆に、POM のプロパティから設定することもできます。これにより、バージョンを 1 か所だけで定義するという要件が満たされ、更新を希望する開発者はdependency、更新されたバージョン番号で上書きするのではなく、プロパティに遭遇し、チェックアウトしてプロパティを更新する可能性があります。

これは、 Versions Maven Pluginによってさらにサポートされる可能性があります。

于 2013-09-30T08:01:44.053 に答える