2017-06-06 79 views
1

后,这是我们与移民面临jooq版本3.4.1 3.9.3 问题。Jooq 3.9.3删除自定义生成的Java文件生成

我们有一个设置,我们在其中扩展JavaGenerator并覆盖generatePojo(TableDefinition tableDefinition)以从数据库中的数据创建一些自定义枚举。这个枚举的创建方式有些诡异,使用PrintWriter并将数据写入FooEnum.java文件。

事情是这样的:

public class FooGenerator extends JavaGenerator { 

    @Override 
    protected void generatePojo(TableDefinition table) { 
    super.generatePojo(table); 
    // this works in jooq 3.4.1 but not in 3.9.3 
    generateEnumClasses(table); // loads data and produces FooEnum.java with PrintWriter 

    } 
} 

会发生什么事是,FooEnum.java被生成,然后删除不久之后。有趣的是,如果我创建Footxt文件在应创建枚举的目录中,此文件存活clean install

看来,枚举被删除第(二)产生的目标之后:

jooq-codegen-maven:3.9.3:generate 

为什么枚举越来越删除,如何保持从3.4.1版本在那里生存的行为的任何想法?

这是我们用来扩展JavaGenerator自定义的生成提供与对插件:

<groupId>org.jooq</groupId> 
<artifactId>jooq-codegen-maven</artifactId> 
<executions> 
    <execution> 
     <goals> 
      <goal>generate</goal> 
     </goals> 
     <id>some id</id> 
     <configuration> 
      <generator> 
       <name>org.jooq.util.FooGenerator</name> 
      // ... 
      </generator> 
     </configuration> 
    </execution> 
</executions> 

回答

1

在在这种情况下,任何人绊倒,似乎在新jooq版本存在

一些清理代码
JavaGenerator { 

    public final void generate(Database db) { 
    // .... this deletes 'excess' java files 
    log.info("Removing excess files"); 
    this.empty(this.getStrategy().getFileRoot(),this.scala?".scala":".java", this.files, this.directoriesNotForRemoval); 
    this.directoriesNotForRemoval.clear(); 
    this.files.clear(); 
    } 
} 

删除多余的.java文件。

编辑

这里是一个link到GitHub的问题就从卢卡斯评论此功能。

+1

感谢您记录这一点。事实上,这是在3.9版本中实现的。理由在这里列出:https://github.com/jOOQ/jOOQ/issues/5556。在这种情况下,“过多”意味着可能存在以前代码生成的不再有用的工件,因为底层对象(模式,表等)已被删除。这通常是一个好主意1)不要在生成的包中放入任何东西或2)在你提到的列表中注册自定义生成的东西,例如通过使用内部API如'JavaGenerator.newJavaWriter()'和'closeJavaWriter()' –

+0

感谢您评论Lukas。也许我们应该像你说的那样使用Java编写器。 – John

+0

是的,确实如此。不过,您的反馈对于我们的jOOQ 4.0代码生成器重新设计来说是有价值的输入。 –