【问题标题】:How to get rid of files with names bin$如何摆脱名称为 bin$ 的文件
【发布时间】:2017-06-29 01:35:19
【问题描述】:

使用 Gradle 插件的 Jooq 生成器,我现在不仅可以使用 POJO 和表,而且不仅可以使用具有正常名称的类,还可以使用名称以 bin$ 开头的大量文件。

它们不是必需的,因为就在昨天,生成器还没有生成这些文件。无论有没有它们,一切都正常。但我不希望项目中堆满了数十个过多的文件。

【问题讨论】:

  • Read about the recycle bin,这是这些被丢弃的对象所在的位置。
  • @AlexPoole 谢谢你,但我已经找到了那个答案和另一个答案,并把它们放在这里供其他人使用。
  • 嗯,有趣。一些BIN$ 对象(即约束)已经被排除在代码生成之外,但这可能应该扩展到所有对象类型。 jOOQ 3.10 的新功能请求在这里:github.com/jOOQ/jOOQ/issues/5866。感谢您提请注意!
  • @Gangnus:不用担心 :) 您的正则表达式缺少点,您应该转义美元。试试Bin\$.*
  • @Gangnus:嗯... jOOQ 仍然会将字符串解析为正则表达式。有关详细信息,请参阅Pattern.compile()$ 在正则表达式中有特殊的语义,星号 *

标签: java oracle gradle code-generation jooq


【解决方案1】:

从第 10 版开始,Oracle 将删除的表放入回收站。它们的名称以 Bin$ 开头。因此,JooQ 只是为删除的表创建类。这可以通过两种方式阻止:停止在 Oracle 中使用回收 bean 或过滤 Jooq 生成器为其创建类的表。

ALTER SYSTEM SET RECYCLEBIN = OFF DEFERRED;
purge dba_recyclebin;

或更改生成器设置(示例为 Gradle)

generator{
   ...
   database {
      ...
      excludes = '(?i:BIN\\$.*)'

编辑:经过几次尝试(由 Lukas)和检查(由我),Lukas 终于找到了 excludes 的正确含义。它的形式,恕我直言,有唯一的解释——JOOQ 不能正确使用正则表达式,因为 Groovy does not parse 是单引号中的字符串。

【讨论】:

    【解决方案2】:

    jOOQ 的<excludes/> 设置是一个Java 正则表达式。你必须像这样正确地形成它:

    excludes = '(?i:BIN\\$.*)'
    

    解释:

    • 使用(?i:...) 表示不区分大小写。以防万一。双关语。
    • $ 符号之前使用\\,因为$ 在正则表达式中表示“行尾”。你想逃避那个。而且因为 Groovy/Gradle 会解析(如“查找转义序列”)您的字符串 you need to escape the backslash too,以便它到达 Java Pattern.compile() 调用
    • 使用.* 表示在$ 之后要匹配任意数量的字符。 . = 任意字符,* = 任意重复次数

    【讨论】:

    • 太棒了!这条线确实有效。但第二点解释是错误的。对于 Groovy 不解析单引号中的字符串 '.
    • @Gangnus: Are you sure? :)
    • 当然。在groovy-lang.org/syntax.html#_single_quoted_string 中比较 4.1 和 4.4。您对 4.3 的引用属于三引号字符串。我不得不和你打赌:-)
    • 可能是我的眼镜,但在 4.3.1 的示例中,我只看到一个撇号分隔字符串,而不是三个。无论如何,它现在有效,对吧? (带有转义的反斜杠)
    • 好的,我明白这里有什么困惑。当您说“解析”时,您的意思是“插值”。我的意思是“寻找转义序列”
    猜你喜欢
    • 1970-01-01
    • 2011-12-04
    • 2020-10-14
    • 2020-12-13
    • 2014-10-19
    • 2011-08-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多