使用 jOOQ,如何只生成包的特定成员?

Using jOOQ, how to generate only specific members of a package?

我试图避免为我不需要的存储过程生成代码。 生成器配置(maven 插件)的相关部分如下所示:

<includes>
    SOME_SCHEMA\.SOME_PACKAGE\.MyProcedure
</includes>
<excludes></excludes>

很遗憾,这与任何内容都不匹配。使用

<includes>
    SOME_SCHEMA\.SOME_PACKAGE
</includes>

有效,但当然会生成整个包的代码。

MyProcedure 是数据库中定义的过程的区分大小写的确切名称。我也尝试过使用

SOME_SCHEMA\.SOME_PACKAGE\.MYPROCEDURE

,没有成功。

编辑 - 研究:我查看了 code generation 上的 jOOQ 手册部分,但没有找到解决我的问题的方法。

目前,<includes><excludes> 只匹配包,不匹配包中包含的过程/函数/类型。更准确地说,正则表达式匹配架构级对象。

有一个现有的标志将此行为扩展到表中的列(使用 <includeExcludeColumns/>),但是从 jOOQ 3.9 开始,包内的对象不存在这样的标志

我已经创建了一个功能请求以在未来的 jOOQ 版本中实现它: https://github.com/jOOQ/jOOQ/issues/6400

解决方法:

  • 您可以扩展 jOOQ-meta 中的 org.jooq.util.oracle.OracleDatabaseorg.jooq.util.oracle.OraclePackageDefinition 以过滤掉那些您不感兴趣的过程。
  • 您可以覆盖 jOOQ-codegen 中的 JavaGenerator.generatePackage() 方法以防止生成不需要的对象的代码
  • 您可以 post 处理生成的代码并再次删除不需要的对象和对这些对象的引用。