7

我们正在使用 JPA 并试图坚持标准规范(并避免特定于 Hibernate 的功能)。

我们在另一个项目 (A) 中使用一个项目(我们称之为 X)作为 Maven 依赖项。

我们需要 JPA 来扫描项目 X 中的实体以及扫描项目 A。

为此,我们添加了一行

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

里面

<persistence-unit>

在persistence.xml 中。这工作正常。

我们仍然存在的问题是,我们现在需要在 pom.xml 和 persistence.xml 中指定项目 X 的​​版本。这是未来部署问题的秘诀。

我们提出了一个使用 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

2

我已经这样解决了:

代替persistence.xml整个<jar-file>标签,即

<persistence-unit name="PersistenceUnit">
    ...
    <!-- here is where the jar file is supposed to go -->
    ${importjarfile}
    ...
</persistence-unit>

最后,像这样设置你的属性:

<properties>
    <x-version>4.0</x-version>
    <importjarfile><![CDATA[<jar-file>lib/X-v5-${x-version}.jar</jar-file>]]></importjarfile>
</properties>

这样 Eclipse 就不会看到jar-file标签,也不会抱怨。

我的解决方案实际上更干净一些,因为我使用的是.properties文件,所以我不必使用 CDATA,我希望它仍然有效。

我的解决方案:

importjarfile = <jar-file>lib/X-v5-${x-version}.jar</jar-file>
于 2015-06-16T22:44:31.960 回答
0

我可以建议您添加一个单元测试来验证jar-file预期的 bypersistence.xml是否确实到位?

persistence.xmldependency. _

它会反过来工作,因此可以dependency.version从 POM 中的属性进行设置。这满足了您仅在一个地方定义版本的要求,并且想要更新的开发人员dependency可能会遇到该属性,检查并更新该属性,而不是用更新的版本号覆盖它。

Versions Maven Plugin可以进一步支持这一点。

于 2013-09-30T08:01:44.053 回答