从persistence.xml中引用maven依赖jar的artifactId



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

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

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

最后,我们添加了一行

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

<persistence-unit>

在persistence . xml。

问题是我们现在不仅需要在pom.xml中指定项目X的版本,还需要在persistence.xml中指定项目X的版本。这是将来部署时出现问题的秘诀。

我们已经提出了一个使用Maven资源过滤的系统:

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

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

和$ {x版本}在pom.xml。

这可以工作,但仍然不完美,因为每次项目X获得新版本时,我们必须记住在非标准位置更新版本号。

理想情况下,我们希望能够在pom.xml的依赖部分调整版本信息,并且更改将自动传播到persistence.xml。通过这种方式,我们可以在未来的部署中减少许多可能的错误。

这可能吗?

EDIT (OUR SOLUTION):

我们添加了一个名为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版本号。

我是这样解决的:

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>

我可以建议您添加一个单元测试来验证persistence.xml所期望的jar-file实际上是到位的吗?

dependency导出persistence.xml的版本号是行不通的。

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

最新更新