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.方案

https://stackoverflow.com/questions/4073635/sharing-a-persistence-unit-across-components-in-a-ear-file

这是我在stackoverflow搜到的方案之一,感觉也是最简单的。就是在persistence.xml加一条<jar-file>, 我把这个加在<jta-data-source>的下一行。

这样,就可以自动检测sop-common-0.0.1-SNAPSHOT.jar包里的实体类。

5.<jar-file>变量

上一步骤的<jar-file>的参数是jar包的名字,如果有一天jar包的名字变了,还要在这里手动改,挺麻烦。

所以我做了些改动,如下,让persistence.xml的<jar-file>指向persistence.xml-process.xml然后指向父级pom.xml中的参数。

6.pom.xml (sop-database)

在sop-database中的pom.xml添加profile

直接上代码:

<profile><!-- This profile is used to change settings in function of targeted server.--><id>resources-processor</id><activation><property><name>!m2e.version</name></property></activation><properties><!-- Directories --><resources-directory>/</resources-directory><resources-source>src/main/resources${resources-directory}</resources-source><resources-processor>src/main/resources-processor/${target_server}/</resources-processor><resources-output>classes${resources-directory}</resources-output><!-- Files to process --><processor-suffix>-process.xml</processor-suffix><persistence-file>persistence.xml</persistence-file></properties><build><plugins><plugin><artifactId>maven-compiler-plugin</artifactId><configuration><source>1.6</source><target>1.6</target></configuration><dependencies><dependency><groupId>org.hibernate</groupId><artifactId>hibernate-jpamodelgen</artifactId><version>1.2.0.Final</version><scope>compile</scope></dependency></dependencies></plugin><plugin><groupId>com.google.code.maven-config-processor-plugin</groupId><artifactId>config-processor-maven-plugin</artifactId><version>2.5</version><configuration><transformations><transformation><input>${resources-source}META-INF/${persistence-file}</input><output>${resources-output}META-INF/${persistence-file}</output><config>${resources-processor}META-INF/${persistence-file}${processor-suffix}</config></transformation></transformations><!-- Here is the mapping --><namespaceContexts><p>http://java.sun.com/xml/ns/persistence</p></namespaceContexts></configuration><executions><execution><goals><goal>process</goal></goals></execution></executions></plugin></plugins></build></profile>

7.persistence.xml-process.xml

在sop-database建立resources-processor等。jboss7是运行的server。

现sop-database的src结构如下:

persistence.xml-process.xml 的内容如下:

<processor xsi:noNamespaceSchemaLocation="https://maven-config-processor-plugin.googlecode.com/svn/tags/config-processor-maven-plugin-2.5/src/etc/schema/transformation-2.2.xsd"><modify><name>//p:persistence-unit[@name='defaultPersistenceUnit']//p:jta-data-source</name><value><![CDATA[<jta-data-source>${jpa.datasource}</jta-data-source>]]></value></modify><modify>
<name>//p:persistence-unit[@name='defaultPersistenceUnit']//p:jar-file</name><value><![CDATA[<jar-file>${jar.file}</jar-file>]]></value>
</modify></processor>

<name>中的 p:persistence-unit 对应于 persistence.xml里的<persistence-unit>, p:jar-file 对应于<jar-file>。

${jar.file}中的jar.file是我随便命名的,与父级pom.xml 定义的标签名一致。

8.父级pom.xml (sop)

父级pom.xml部分内容如下:

在sop项目里找到父级pom.xml并在其中的jboss7profile的properties里添加:

<jar.file>${parent.artifactId}-common-${version}.jar</jar.file>

9.激活resources-processor

在sop-database项目单击右键—>maven—>select maven profiles, 勾选刚才的resources-processor。

然后clean projet:

Maven 跨项目调用persistence.xml动态配置文件相关推荐

  1. Maven 建立父子项目和跨项目调用内容的步骤

    使用Maven管理项目,同时我们是做微服务,所以对于微服务项目来说,使用Maven建立起一个父子项目这种关系,很方便管理(只是个人感觉) 设计层面 (1)服务端和客户端肯定是分开写的,另外还有一个公共 ...

  2. maven添加子工程_Maven建立父子项目和跨项目调用内容的步骤—佳佳小白

    设计层面 (1)服务端和客户端肯定是分开写的,另外还有一个公共的项目,比如一些实体类等都是可以作为公共的类放到这个公共的项目. (2)这样来说,子项目至少有三个,server(服务层子项目).web( ...

  3. idea创建maven web项目,pom.xml文件一直显示红色

    想在idea里面用maven创建一个web项目 要配置maven, 刚开始使用的是maven的3.8.5的版本 (首先你的maven要先配置好,可以在终端输入mvn -v查看maven安装情况, 然后 ...

  4. Maven学习总结(十一)——Maven项目对象模型pom.xml文件详解

    2019独角兽企业重金招聘Python工程师标准>>> <project xmlns="http://maven.apache.org/POM/4.0.0" ...

  5. maven项目打war包有些配置文件不见了?怎么回事

    maven项目打war包有些配置文件不见了? 怎么回事儿? 情况说明:在项目转maven后,通过如下编译成功后 然而拷贝出war后发现包里面的config下面的配置文件不见了,并未被加载到包中: 解决 ...

  6. maven web项目中的web.xml的版本如何更改

    maven web项目中的web.xml的版本如何更改 问题 因web.xml的版本太低不支持el表达式的问题(maven3.6版本通过底层的maven web插件生成的最终的web.xml文件版本只 ...

  7. 【报错笔记】Eclipse导入Maven项目时pom.xml报错,项目上有红感叹号。

    Eclipse导入Maven项目时pom.xml报错,项目上有红感叹号. 错误原因: pom.xml中依赖的jar包在本地仓库中不存在,但是在maven/conf/settings.xml中定义了阿里 ...

  8. JAVA项目怎么不是蓝色_解决IDEA创建maven项目时pom.xml没有变蓝的问题

    如下所示: 选中pom.xml,右键点击add as maven project, 稍等片刻后就可以了 补充知识:Idea导入maven项目不自动识别pom.xml *Idea导入maven项目不自动 ...

  9. IDEA导入Maven项目,pom.xml文件中 有inspects a maven model for resolution problems报错 !!!!!!!!!!有用

    IDEA导入Maven项目,pom.xml文件中 有inspects a maven model for resolution problems报错 2018年08月06日 22:13:09 东方不能 ...

最新文章

  1. TP5 MYSQL按照原来的IN顺序查询
  2. 算法分析-分治 归并排序,递归插入排序,二分查找
  3. java path 注解_@PathVariable注解的使用和@Requestparam
  4. IIS7日志文件位置
  5. 字符串比较strcmp
  6. 服务器搭建mutt邮件发送环境
  7. 12-关于DOM操作的相关案例
  8. CSDN—编写博客(快捷键)
  9. 大一c语言作业操作题库,c语言题目(大一c语言编程题库)
  10. 出现电脑蓝屏代码0x000000ed怎么解决
  11. 沁恒CH573开发板上手
  12. C# zxing条形码开源库的简单使用例子
  13. 计算机系微电子专业大学排名,2017微电子专业大学排名
  14. CSDN图片上传去除水印
  15. phpcms富文本框上传图片去除水印
  16. 华为OD机试 - 士兵过河
  17. 新手操作更换固态和重装系统竟然这么麻烦?!
  18. html文标题党,教你成为微信公众号推文标题党
  19. uni-app获取元素高度
  20. React-router(8)Link 标签 to 属性为对象时(路由信息传值)

热门文章

  1. AutoEventWireup=false导致Page_Load事件未执行
  2. STM32CubeMX学习笔记(49)——USB接口使用(MSC基于SD卡模拟U盘)
  3. 风控模型-美国FICO标准
  4. 编写Windows下父亲儿子女儿放取水果进程同步的演示程序。(C/C++)
  5. 狼、狐狸、老鼠、王八和猪
  6. MTK6225-状态栏图标的显示与隐藏
  7. note3升级android,三星Galaxy Note3的手机系统是什么?能升级安卓4.3吗?
  8. TPS、QPS、并发数、Throughput等概念
  9. linux创建ssh牢笼用户
  10. linux下将word转为PDF