【发布时间】:2023-03-24 20:21:01
【问题描述】:
我在将 jooq codegen 与 JPADatabase 结合使用时遇到问题。我已经浏览了这个post 并进行了相应的更改。我的项目包含子模块,实体类在域模块中。我有依赖于域的 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 存储库中缓存了该特定版本。我的答案是错误的。
【问题讨论】:
-
您是否将实体置于使用 jOOQ 代码生成器的模块的依赖项中?见:stackoverflow.com/q/42968155/521799
-
是的。域模块是发生代码生成的 biz 模块中的依赖项。