2017-06-06 87 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代碼生成器重新設計來說是有價值的輸入。 –