1.场景
由于业务原因,需要把common项目中的persistence.xml移至database项目中,并且persistence.xml的部分变量是调用了父项目的父级pom.xml的参数。
2.项目结构
新建了3个项目来演示。
-sop:maven父项目,负责连接所有子项目(子模块),含父级pom.xml。
-sop-common:子项目,包含实体类 EntityClient.java
-sop-database:子项目,包含与数据库操作的相关。
此时已把sop-common中的persistence.xml移至sop-database。
3.问题
用maven构建项目,整个项目被打包成一个ear包, 每个子项目会打包成独立的jar包。
简化结构图:
---sop.ear
--sop-common-0.0.1-SNAPSHOT.jar
--sop-database-0.0.1-SNAPSHOT.jar
进行测试时,会发现EntityClient.java无法调用sop-database中的persistence.xml。那么问题则是,实体类如何与跨项目的persistence.xml建立联系?
4.方案
这是我在stackoverflow搜到的方案之一,感觉也是最简单的。就是在persistence.xml加一条<jar-file>, 我把这个加在<jta-data-source>的下一行。
这样,就可以自动检测sop-common-0.0.1-SNAPSHOT.