Can’t resolve image ‘VERSION_3_17’ in jOOQ generated code – Java, SQL and jOOQ.

[ad_1]

Beginning with jOOQ 3.16 and #12601, there could also be a compilation error with a message like this in your jOOQ generated code:

[ERROR] …/DefaultCatalog.java:[53,73] can not discover image
[ERROR] image: variable VERSION_3_17
[ERROR] location: class org.jooq.Constants

Sometimes, this error is blended with different compilation errors in generated code. Its goal is to assist troubleshoot these different compilation errors. This error is attributable to a mismatch between two jOOQ artifacts which are being utilized by customers, together with:

  • org.jooq:jooq (the runtime library)
  • org.jooq:jooq-codegen (the code technology library)

That is additionally documented within the Javadoc of stated generated code:

/**
 * A reference to the three.17 minor launch of the code generator. If this
 * would not compile, it is as a result of the runtime library makes use of an older minor
 * launch, specifically: 3.17. You'll be able to flip off the technology of this reference
 * by specifying /configuration/generator/generate/jooqVersionReference
 */
non-public static ultimate String REQUIRE_RUNTIME_JOOQ_VERSION = 
    Constants.VERSION_3_17;

Similar to with the JDK that has a runtime (the JDK or JRE) and a code generator (the compiler), customers should make it possible for the runtime model is at all times >= the code technology model.

If you happen to see the above error, you might need a configuration like this, in your maven or gradle construct:

<!-- A runtime dependency. -->
<dependency>
    <groupId>org.jooq</groupId>
    <artifactId>jooq</artifactId>
    <model>3.16.9</model>
</dependency>

<!-- After which, in a while: -->
<plugin>
    <groupId>org.jooq</groupId>
    <artifactId>jooq-codegen-maven</artifactId>
    <model>3.17.3</model>
</plugin>

The three.17 model of the code generator will produce code that may be consumed solely by the runtime library 3.17 or newer. Whereas it’s completely effective to make use of an older code generator with a more recent runtime:

  • org.jooq:jooq:3.17.3
  • org.jooq:jooq-codegen:3.16.9

The above configuration shouldn’t be supported:

  • org.jooq:jooq:3.16.9
  • org.jooq:jooq-codegen:3.17.3

In different phrases:

  • Generated code is ahead appropriate, however not backward appropriate.
  • The runtime API (which is utilized by generated code) is backward appropriate, however not ahead appropriate.

Nonetheless, if doable, the advice is to at all times match the code technology library and the runtime library to keep away from another bother.

Turning off the function

If this code technology function bothers you, you possibly can at all times flip it off by specifying:

<configuration>
  <generator>
    <generate>
      <jooqVersionReference>false</jooqVersionReference>
    </generate>
  </generator>
</configuration>

[ad_2]

Leave a Reply

Your email address will not be published. Required fields are marked *