我在PostgreSQL数据库中使用JOOQ。目前,JOOQ生成的所有代码都在同一个Maven项目中。
我想知道是否有可能在两个独立的Maven模块中分离JOOQ代码生成:
服务器模块中的- :JOOQ记录和DAO生成
- 在一个通用模块中:仅生成POJO
目标是在服务器和客户端模块之间共享公共模块。
我的生成器中目标的配置如下:
<target>
<packageName>my.package</packageName>
<directory>target/generated-sources/gen-jooq/</directory>
</target>
解决方案我根据Lukas Eder答案中的第二个策略解决了我的问题。
我在通用模块中有一个Jooq生成配置。我的服务器模块中有另一代配置。这两种配置共享一个用于公共零件的配置文件。
在生成源之后,在处理源阶段,antrun插件会删除多余的类。
公共模块中的antrun配置,只保留pojo。
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-antrun-plugin</artifactId>
<version>1.7</version>
<executions>
<execution>
<phase>process-sources</phase>
<goals>
<goal>run</goal>
</goals>
<configuration>
<target>
<delete includeEmptyDirs="true">
<fileset dir="target/generated-sources/gen-jooq/my/package/tables/records/" />
<fileset dir="target/generated-sources/gen-jooq/my/package/tables/" includes="*.java" />
<fileset dir="target/generated-sources/gen-jooq/my/package" includes="*.java" />
</delete>
</target>
</configuration>
</execution>
</executions>
</plugin>
在服务器模块中,只有pojo被删除:
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-antrun-plugin</artifactId>
<version>1.7</version>
<executions>
<execution>
<phase>process-sources</phase>
<goals>
<goal>run</goal>
</goals>
<configuration>
<target>
<delete includeEmptyDirs="true">
<fileset dir="target/generated-sources/gen-jooq/my/package/tables/pojos/" />
</delete>
</target>
</configuration>
</execution>
</executions>
</plugin>
有几种方法:
仅使用GeneratorStrategy
您可以实现一个自定义GeneratorStrategy
,它将把DAO和/或POJO类型的输出路径完全重写为您所知道的不同的maven模块。
使用多个代码生成运行
与许多其他场景一样,您希望干净地分离代码生成输出(例如,在这个问题中:具有不同模式的多个数据库的jOOQ代码生成(,您可以指定多个代码生成执行,如下所示:
<plugin>
<groupId>org.jooq</groupId>
<artifactId>jooq-codegen-maven</artifactId>
<executions>
<execution>
<id>exec-1</id>
<phase>generate-sources</phase>
<goals>
<goal>generate</goal>
</goals>
<configuration>...</configuration>
</execution>
<execution>
<id>exec-2</id>
<phase>generate-sources</phase>
<goals>
<goal>generate</goal>
</goals>
<configuration>...</configuration>
</execution>
</executions>
</plugin>
这两个执行可以具有共享和独立的配置,包括<target>
。生成DAO类型的生成也将始终生成POJO类型,因此您可能必须从代码生成输出中删除这些类型,例如,在代码生成后立即删除目录。
如果需要,您仍然可以使用GeneratorStrategy
来指定不同的包
使用一些第三方包装工具
仅仅因为jOOQ的代码生成器在一个目录层次结构中生成所有内容,并不意味着你必须这样做。maven-shade-plugin
或其他类似的插件可以在代码生成后,甚至在代码编译后用于拆分代码。我不会在这里列出所有可能的选择,但这肯定会给你一个想法。