我有一个Maven jar项目,它使用cxf-codegen-plugin创建一个SOAP客户端。
在另一个使用该客户端的Maven项目中,只需要保存数据类(某些soap响应)的实例 - 由cxf-codegen-plugin生成 - 使用JPA (目前使用OpenJPA)。
在编译/增强和安装客户端jar之前,可能有一些配置 - 例如 - 在每个客户端源代码生成之后将@Entity注释添加到数据类但我想摆脱这个阶段,同时仍然保持客户端尽可能通用。使用客户端的项目应该能够安全地假设该类具有持久性。
处理此问题的最佳方法可能是客户端项目设置中的一些技巧(目前使用openjpa-maven-plugin来增强数据类)来检测所需的类,并以某种方式使它们具有持久性并加强这些。
我宁愿跳过像维护beans.xml这样的东西,如果可能的话还要坚持注释,但它也是一个选项。
答案 0 :(得分:0)
如果有人需要相同我描述我目前使用的方法。它基于使用id
添加注释,imports
和com.google.code.maven-replacer-plugin
等字段。
很快:我在pom.xml
<plugin>
<groupId>com.google.code.maven-replacer-plugin</groupId>
<artifactId>replacer</artifactId>
<version>1.5.3</version>
<executions>
<execution>
<phase>process-sources</phase>
<goals>
<goal>replace</goal>
</goals>
</execution>
</executions>
<configuration>
<!-- dir where cxf-codegen-plugin has generated model classes -->
<basedir>src/generated/java/org/example/service</basedir>
<includes>
<include>NamedEntity.java</include>
</includes>
<regex>false</regex>
<replacements>
<replacement>
<token>package org.example.service.service;</token>
<value>package org.example.service.service;
import javax.persistence.Id;
import javax.persistence.Entity;
import javax.persistence.Inheritance;
import javax.persistence.GeneratedValue;
import javax.persistence.InheritanceType;
</value>
</replacement>
<replacement>
<token>public class</token>
<value>@Entity
@Inheritance(strategy=InheritanceType.TABLE_PER_CLASS)
public class</value>
</replacement>
<replacement>
<token>protected String name;
</token>
<value>protected String name;
@Id
@GeneratedValue
@Getter
private Long id;
</value>
</replacement>
</replacements>
</configuration>
</plugin>
为了保持代码格式良好,<replacement>
中需要所有缩进和换行符。使用正则表达式可能会更时尚,但这对我来说已经足够了。