John
John

Reputation: 5287

Jooq 3.9.3 deletes custom generated java files after generate

This is an issue we face with migration from jooq version 3.4.1 to 3.9.3.

We have a setup in which we extend JavaGenerator and override generatePojo(TableDefinition tableDefinition) to create some custom enum from data in database. This enum is created in a bit hackish way, using PrintWriterand writing the data into FooEnum.java file.

Something like this:

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

    }
}

What happens is that the FooEnum.java gets generated and then deleted shortly afterwards. Funny enough, if i create Foo.txt file in the directory where enum should be created, this file survives clean install.

It seems that the enum is deleted after first (of two) generate goals:

jooq-codegen-maven:3.9.3:generate 

Any ideas why is the enum getting deleted and how to keep the behavior from version 3.4.1 where it survives ?

This custom generator that we use to extend JavaGenerator is supplied to plugin with:

<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>

Upvotes: 1

Views: 1069

Answers (1)

John
John

Reputation: 5287

In case anybody else stumbles upon this, it seems that in newer jooq versions there is some cleanup code in

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();
    }
}

which deletes excess .java files.

Edit

Here is a link to github issue regarding this feature from Lukas comment.

Upvotes: 1

Related Questions