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
被生成,然後刪除不久之後。有趣的是,如果我創建Foo。 txt文件在應創建枚舉的目錄中,此文件存活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>
感謝您記錄這一點。事實上,這是在3.9版本中實現的。理由在這裏列出:https://github.com/jOOQ/jOOQ/issues/5556。在這種情況下,「過多」意味着可能存在以前代碼生成的不再有用的工件,因爲底層對象(模式,表等)已被刪除。這通常是一個好主意1)不要在生成的包中放入任何東西或2)在你提到的列表中註冊自定義生成的東西,例如通過使用內部API如'JavaGenerator.newJavaWriter()'和'closeJavaWriter()' –
感謝您評論Lukas。也許我們應該像你說的那樣使用Java編寫器。 – John
是的,確實如此。不過,您的反饋對於我們的jOOQ 4.0代碼生成器重新設計來說是有價值的輸入。 –