带有 JPADatabase 的 jooq codegen 不工作

jooq codegen with JPADatabase not working

我在将 jooq codegen 与 JPADatabase 结合使用时遇到问题。我已经完成了 并进行了相应的更改。我的项目包含子模块,实体 类 在域模块中。我有依赖于域的 biz 模块。所以我在 biz 模块的 pom.xml.

中有这个构建配置
<build>
    <plugins>
        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-compiler-plugin</artifactId>
            <configuration>
                <source>1.8</source>
                <target>1.8</target>
            </configuration>
        </plugin>

        <plugin>
            <groupId>org.jooq</groupId>
            <artifactId>jooq-codegen-maven</artifactId>
            <version>3.9.1</version>

            <!-- The plugin should hook into the generate goal -->
            <executions>
                <execution>
                    <phase>generate-sources</phase>
                    <goals>
                        <goal>generate</goal>
                    </goals>
                </execution>
            </executions>

            <dependencies>
                <dependency>
                    <groupId>org.jooq</groupId>
                    <artifactId>jooq-meta-extensions</artifactId>
                    <version>3.9.1</version>
                </dependency>
            </dependencies>

            <configuration>

                <!-- Generator parameters -->
                <generator>

                    <database>
                        <name>org.jooq.util.jpa.JPADatabase</name>
                        <properties>
                            <!-- A comma separated list of Java packages, that contain your entities -->
                            <property>
                                <key>packages</key>
                                <value>com.yaswanth.domain.entity</value>
                            </property>
                        </properties>
                    </database>

                    <target>
                        <packageName>com.yaswanth.domain.entity.jooq</packageName>
                        <directory>target/generated-sources/jooq</directory>
                    </target>
                </generator>
            </configuration>
        </plugin>
    </plugins>
</build>

插件因实体上的 ClassNotFoundException 而失败。这是堆栈跟踪。

Caused by: org.jooq.exception.DataAccessException: Error while exporting schema
    at org.jooq.util.jpa.JPADatabase.create0(JPADatabase.java:147)
    at org.jooq.util.AbstractDatabase.create(AbstractDatabase.java:221)
    at org.jooq.util.AbstractDatabase.create(AbstractDatabase.java:213)
    at org.jooq.util.AbstractDatabase.getDialect(AbstractDatabase.java:195)
    at org.jooq.util.AbstractGenerator.logDatabaseParameters(AbstractGenerator.java:129)
    at org.jooq.util.JavaGenerator.generate(JavaGenerator.java:243)
    at org.jooq.util.GenerationTool.run(GenerationTool.java:610)
    at org.jooq.util.GenerationTool.generate(GenerationTool.java:199)
    at org.jooq.util.maven.Plugin.execute(Plugin.java:188)
    ... 22 more
Caused by: java.lang.ClassNotFoundException: com.walmartlabs.sc.domain.entity.ItemNames
    at org.codehaus.plexus.classworlds.strategy.SelfFirstStrategy.loadClass(SelfFirstStrategy.java:50)
    at org.codehaus.plexus.classworlds.realm.ClassRealm.unsynchronizedLoadClass(ClassRealm.java:271)
    at org.codehaus.plexus.classworlds.realm.ClassRealm.loadClass(ClassRealm.java:247)
    at org.codehaus.plexus.classworlds.realm.ClassRealm.loadClass(ClassRealm.java:239)
    at java.lang.Class.forName0(Native Method)
    at java.lang.Class.forName(Class.java:264)
    at org.jooq.util.jpa.JPADatabase.create0(JPADatabase.java:135)
    ... 30 more

域模块 类 已经生成,但插件仍然显示 ClassNotFoundException。我正在使用 jooq 版本 3.9.1。谁能告诉我我做错了什么?

更新:Lukas Eder 的答案是正确答案并被接受。我自己对这个问题的回答对我有用,因为我在 Maven 仓库中缓存了那个特定版本。我的回答是错误的。

您似乎 运行 问题 #5845,它已针对 jOOQ 3.10 修复并计划用于 3.9.3 和 3.8.8。

目前最好的解决方法可能是使用 jooq-meta-extensions 依赖项的 GitHub 版本 (3.10-SNAPSHOT):https://github.com/jOOQ/jOOQ/tree/master/jOOQ-meta-extensions,或相应地修补您的版本。

根据@Lukas Eder 的回答,我尝试了 #5845 的建议。以下构建配置有效。

<build>
  <plugins>
    <plugin>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-compiler-plugin</artifactId>
        <configuration>
            <source>1.8</source>
            <target>1.8</target>
        </configuration>
    </plugin>

    <plugin>
        <groupId>org.jooq</groupId>
        <artifactId>jooq-codegen-maven</artifactId>
        <version>3.9.1</version>

        <!-- The plugin should hook into the generate goal -->
        <executions>
            <execution>
                <phase>generate-sources</phase>
                <goals>
                    <goal>generate</goal>
                </goals>
            </execution>
        </executions>

        <dependencies>
            <dependency>
                <groupId>org.jooq</groupId>
                <artifactId>jooq-meta-extensions</artifactId>
                <version>3.9.1</version>
            </dependency>

             <!-- 

              This needs to be the dependency where the entity classes reside. 
              In my case, it is in the same module as the build profile is present.
              Hence the version is ${project.version}
             -->
            <dependency>
                <groupId>com.yaswanth</groupId>
                <artifactId>domain</artifactId>
                <version>${project.version}</version>
            </dependency>  
        </dependencies>
        <configuration>

            <!-- Generator parameters -->
            <generator>

                <database>
                    <name>org.jooq.util.jpa.JPADatabase</name>
                    <properties>
                        <!-- A comma separated list of Java packages, that contain your entities -->
                        <property>
                            <key>packages</key>
                            <value>com.yaswanth.domain.entity</value>
                        </property>
                    </properties>
                </database>

                <target>
                    <packageName>com.yaswanth.domain.entity.jooq</packageName>
                    <directory>target/generated-sources/jooq</directory>
                </target>
            </generator>
        </configuration>
    </plugin>
</plugins>

这个配置的奇怪之处在于我在它自己的 POM 的构建配置文件中将模块作为插件的依赖项包含在内!!