Jooq 3.9.3删除自定义生成的Java文件生成
问题描述:
后,这是我们与移民面临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>
答
在在这种情况下,任何人绊倒,似乎在新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的问题就从卢卡斯评论此功能。
感谢您记录这一点。事实上,这是在3.9版本中实现的。理由在这里列出:https://github.com/jOOQ/jOOQ/issues/5556。在这种情况下,“过多”意味着可能存在以前代码生成的不再有用的工件,因为底层对象(模式,表等)已被删除。这通常是一个好主意1)不要在生成的包中放入任何东西或2)在你提到的列表中注册自定义生成的东西,例如通过使用内部API如'JavaGenerator.newJavaWriter()'和'closeJavaWriter()' –
感谢您评论Lukas。也许我们应该像你说的那样使用Java编写器。 – John
是的,确实如此。不过,您的反馈对于我们的jOOQ 4.0代码生成器重新设计来说是有价值的输入。 –