Mar*_*eau 5 hibernate jpa pom.xml maven
我们正在使用JPA,并且正在努力坚持标准规范(并避免使用特定于Hibernate的功能).
我们在另一个项目(A)中使用一个项目(让我们称之为X)作为Maven依赖项.
我们需要JPA来扫描项目X的实体以及扫描项目A.
为此,我们增加了一条线
<jar-file>lib/X-v5-4.0.jar</jar-file>
Run Code Online (Sandbox Code Playgroud)
内
<persistence-unit>
Run Code Online (Sandbox Code Playgroud)
在persistence.xml中.这很好用.
我们仍然存在的问题是,我们现在需要不仅在pom.xml中而且在persistence.xml中指定项目X的版本.这是未来部署问题的一个方法.
我们已经提出了一个使用Maven资源过滤的系统:
<jar-file>lib/X-v5-${x-version}.jar</jar-file>
Run Code Online (Sandbox Code Playgroud)
在persistence.xml和
<properties>
<x-version>4.0</x-version>
</properties>
Run Code Online (Sandbox Code Playgroud)
和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>
Run Code Online (Sandbox Code Playgroud)
我相信你会看到优势:因为我们通过包签名来引用这些库,所以我们不再需要担心jar版本号.
我可以建议您添加一个单元测试来验证预期jar-file是否persistence.xml确实到位?
persistence.xml从 .中导出版本号是行不通的dependency。
反之亦然,即dependency.version从 POM 中的属性进行设置。这满足了您仅在一处定义版本的要求,并且想要更新版本的开发人员dependency很可能会遇到该属性,检查它并更新该属性,而不是用更新的版本号覆盖它。
Versions Maven Plugin可以进一步支持这一点。
| 归档时间: |
|
| 查看次数: |
2988 次 |
| 最近记录: |