Java JOOQ不生成类(JPADatabase)
我对JOOQ框架(3.13.5)以及Spring Boot和Java8有一个问题。我正试图使用JOOQ中的GenerationTool,按照作者页面()上的手册中的说明生成域类。项目结构如下所示: 域包包含JPA实体。然后我添加了run配置,其中作为主类,我用参数/JOOQ-config.xml标记了JOOQ库中的GenerationTool(如上面链接的作者手册中所述)。配置文件内容如下所示:Java JOOQ不生成类(JPADatabase),java,mysql,maven,jpa,jooq,Java,Mysql,Maven,Jpa,Jooq,我对JOOQ框架(3.13.5)以及Spring Boot和Java8有一个问题。我正试图使用JOOQ中的GenerationTool,按照作者页面()上的手册中的说明生成域类。项目结构如下所示: 域包包含JPA实体。然后我添加了run配置,其中作为主类,我用参数/JOOQ-config.xml标记了JOOQ库中的GenerationTool(如上面链接的作者手册中所述)。配置文件内容如下所示: <configuration xmlns="http://www.jooq.org
<configuration xmlns="http://www.jooq.org/xsd/jooq-codegen-3.13.0.xsd">
<generator>
<database>
<name>org.jooq.meta.extensions.jpa.JPADatabase</name>
<properties>
<property>
<key>packages</key>
<value>com.ormtester.jpa.domain</value>
</property>
<property>
<key>useAttributeConverters</key>
<value>true</value>
</property>
<property>
<key>unqualifiedSchema</key>
<value>none</value>
</property>
<property>
<key>hibernate.physical_naming_strategy</key>
<value>org.springframework.boot.orm.jpa.hibernate.SpringPhysicalNamingStrategy</value>
</property>
</properties>
</database>
</generator>
org.jooq.meta.extensions.jpa.JPADatabase
包装
com.ormtester.jpa.domain
UseAttributeConverter
真的
不合格模式
没有一个
hibernate.physical\u命名\u策略
org.springframework.boot.orm.jpa.hibernate.SpringPhysicalNamingStrategy
对于分析问题,我还添加了pom.xml片段和lib版本:
<dependencies>
<dependency>
<groupId>org.jooq</groupId>
<artifactId>jooq-meta-extensions</artifactId>
<version>3.13.5</version>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-jpa</artifactId>
<version>2.3.4.RELEASE</version>
</dependency>
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<version>${lombok.version}</version>
<optional>true</optional>
</dependency>
<dependency>
<groupId>org.jooq</groupId>
<artifactId>jooq-codegen</artifactId>
<version>3.13.5</version>
</dependency>
</dependencies>
org.jooq
jooq元扩展
3.13.5
org.springframework.boot
spring引导启动器数据jpa
2.3.4.1发布
org.projectlombok
龙目
${lombok.version}
真的
org.jooq
约克代码根
3.13.5
现在,当我尝试构建项目时,我得到以下错误:
18:49:37.330 [main] WARN org.jooq.util.jaxb.tools.MiniJAXB - org.xml.sax.SAXParseException; lineNumber: 1; columnNumber: 72; cvc-elt.1: Cannot find the declaration of element 'configuration'.
18:49:42.215 [main] INFO org.jooq.codegen.GenerationTool - Initialising properties : /jooq-config.xml
18:49:43.134 [main] DEBUG org.jooq.codegen.GenerationTool - Input configuration : <onError>FAIL</onError><generator><name>org.jooq.codegen.DefaultGenerator</name><database><name>org.jooq.meta.extensions.jpa.JPADatabase</name><regexMatchesPartialQualification>true</regexMatchesPartialQualification><sqlMatchesPartialQualification>true</sqlMatchesPartialQualification><includes>.*</includes><excludes></excludes><includeExcludeColumns>false</includeExcludeColumns><includeTables>true</includeTables><includeEmbeddables>true</includeEmbeddables><includeRoutines>true</includeRoutines><includeTriggerRoutines>false</includeTriggerRoutines><includePackages>true</includePackages><includePackageRoutines>true</includePackageRoutines><includePackageUDTs>true</includePackageUDTs><includePackageConstants>true</includePackageConstants><includeUDTs>true</includeUDTs><includeSequences>true</includeSequences><includeIndexes>true</includeIndexes><includePrimaryKeys>true</includePrimaryKeys><includeUniqueKeys>true</includeUniqueKeys><includeForeignKeys>true</includeForeignKeys><includeCheckConstraints>true</includeCheckConstraints><includeInvisibleColumns>true</includeInvisibleColumns><recordVersionFields></recordVersionFields><recordTimestampFields></recordTimestampFields><syntheticIdentities></syntheticIdentities><syntheticPrimaryKeys></syntheticPrimaryKeys><overridePrimaryKeys></overridePrimaryKeys><dateAsTimestamp>false</dateAsTimestamp><ignoreProcedureReturnValues>false</ignoreProcedureReturnValues><unsignedTypes>true</unsignedTypes><integerDisplayWidths>true</integerDisplayWidths><inputCatalog></inputCatalog><outputCatalogToDefault>false</outputCatalogToDefault><inputSchema></inputSchema><outputSchemaToDefault>false</outputSchemaToDefault><schemaVersionProvider></schemaVersionProvider><catalogVersionProvider></catalogVersionProvider><orderProvider></orderProvider><forceIntegerTypesOnZeroScaleDecimals>true</forceIntegerTypesOnZeroScaleDecimals><logSlowQueriesAfterSeconds>5</logSlowQueriesAfterSeconds><logSlowResultsAfterSeconds>5</logSlowResultsAfterSeconds><properties><property><key>packages</key><value>com.ormtester.jpa.domain</value></property><property><key>useAttributeConverters</key><value>true</value></property><property><key>unqualifiedSchema</key><value>none</value></property><property><key>hibernate.physical_naming_strategy</key><value>org.springframework.boot.orm.jpa.hibernate.SpringPhysicalNamingStrategy</value></property></properties></database></generator>
Exception in thread "main" java.lang.NoSuchMethodError: org.jooq.meta.jaxb.Configuration.getBasedir()Ljava/lang/String;
at org.jooq.codegen.GenerationTool.run0(GenerationTool.java:272)
at org.jooq.codegen.GenerationTool.run(GenerationTool.java:225)
at org.jooq.codegen.GenerationTool.generate(GenerationTool.java:220)
at org.jooq.codegen.GenerationTool.main(GenerationTool.java:192)
18:49:37.330[main]WARN org.jooq.util.jaxb.tools.MiniJAXB-org.xml.sax.SAXParseException;行号:1;栏目号:72;cvc elt.1:找不到元素“配置”的声明。
18:49:42.215[main]INFO org.jooq.codegen.GenerationTool-初始化属性:/jooq-config.xml
18:49:43.134[主要]调试org.jooq.codegen.GenerationTool-输入配置:FAILorg.jooq.codegen.DefaultGeneratororg.jooq.meta.extensions.jpa.jpadabasetruetrue.*FalseTrueFalseFalse55Packagescom.ormtester.jpa.domainuseAttributeConverterstrueunqualifiedSchemanonehibernate.physical\u naming\u strategyorg.springframework.boot.orm.jpa.hibernate.Sp环物理命名策略
线程“main”java.lang.NoSuchMethodError中出现异常:org.jooq.meta.jaxb.Configuration.getBasedir()Ljava/lang/String;
位于org.jooq.codegen.GenerationTool.run0(GenerationTool.java:272)
位于org.jooq.codegen.GenerationTool.run(GenerationTool.java:225)
位于org.jooq.codegen.GenerationTool.generate(GenerationTool.java:220)
位于org.jooq.codegen.GenerationTool.main(GenerationTool.java:192)
但是,当我删除jooq-config.xml文件时,错误明确地告诉我无法找到配置文件
我试图调试GenerationTool方法,但找不到有问题的地方。我无法确定问题的根源,因此我将感谢你们的一切帮助。提前谢谢 Spring boot引入了一组默认的jOOQ库版本,您可以使用注释中的说明(主要是
mvn dependency:tree
)对其进行验证。错误提示您的类路径上存在不兼容的版本
如果您自己的版本与spring boot拉入的版本不同,您可能需要告诉spring boot不要拉入任何jOOQ版本,并自己拉入所有版本,例如使用这种方法
org.springframework.boot
弹簧启动机jooq
org.jooq
约克
好的,按照@Lukas和@Lesiak在本主题中给出的提示,我找到了解决方案。正如您在最初的pom内容中所看到的,我添加了jooq-codegen
和jooq-meta-extensions
保留版本3.13.5
,我确信“在引擎盖下”这些依赖项拥有相同版本的jooq
和jooq meta
libs,但不幸的是,在这两种情况下都有3.12.3
。因此,首先我检查了来自@Lukas的提示,然后我不得不从依赖项中排除这些lib,并使用正确的版本号将它们添加为单独的依赖项
我还谈到了jooq
(最初的问题只是jooq meta
),因为配置
类的问题解决后,我在`org.jooq.sqldial'中遇到了类似的问题,如下所示:
java.lang.NoSuchMethodError:
supportedBy([Lorg/jooq/sqldialent;)Ljava/util/Set;
位于org.jooq.meta.AbstractDatabase。(AbstractDatabase.java:117)
位于java.lang.Class.forName0(本机方法)
java.lang.Class.forName(Class.java:264)位于
org.jooq.codegen.GenerationTool.loadClass0(GenerationTool.java:983)
位于org.jooq.codegen.GenerationTool.loadClass(GenerationTool.java:930)
位于org.jooq.codegen.GenerationTool.run0(GenerationTool.java:395)
org.jooq.codegen.GenerationTool.run(GenerationTool.java:225)位于
org.jooq.codegen.GenerationTool.generate(GenerationTool.java:220)位于
org.jooq.codegen.GenerationTool.main(GenerationTool.java:192)
正如我所说,它还伴随着版本不匹配,在本例中是与jooq
一起出现的
在所有这些更改之后,我的pom的内容是:
<dependencies>
<dependency>
<groupId>org.jooq</groupId>
<artifactId>jooq</artifactId>
<version>3.13.5</version>
</dependency>
<dependency>
<groupId>org.jooq</groupId>
<artifactId>jooq-meta-extensions</artifactId>
<version>3.13.5</version>
<exclusions>
<exclusion>
<groupId>org.jooq</groupId>
<artifactId>jooq</artifactId>
</exclusion>
<exclusion>
<groupId>org.jooq</groupId>
<artifactId>jooq-meta</artifactId>
</exclusion>
</exclusions>
</dependency>
<dependency>
<groupId>org.jooq</groupId>
<artifactId>jooq-meta</artifactId>
<version>3.13.5</version>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-jpa</artifactId>
<version>2.3.4.RELEASE</version>
</dependency>
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<version>${lombok.version}</version>
<optional>true</optional>
</dependency>
<dependency>
<groupId>org.jooq</groupId>
<artifactId>jooq-codegen</artifactId>
<version>3.13.5</version>
<exclusions>
<exclusion>
<groupId>org.jooq</groupId>
<artifactId>jooq</artifactId>
</exclusion>
<exclusion>
<groupId>org.jooq</groupId>
<artifactId>jooq-meta</artifactId>
</exclusion>
</exclusions>
</dependency>
<dependency>
<groupId>org.jibx</groupId>
<artifactId>jibx-tools</artifactId>
<version>1.3.1</version>
</dependency>
</dependencies>
然后,只需将您的自定义命名策略添加到xml配置中即可。使用此项目制作,效果非常出色:
我真的很感谢你,@Lukas和@Lesiak,谢谢你的帮助!启动
mvn依赖项:tree
并检查jooq-codegen
和jooq-meta
的解析版本。它们符合你的期望吗?@Lesiak两个库的版本与pom文件-3.13.5中定义的版本完全相同。让我们排除obv
String javaClassName = super.getJavaClassName(definition, mode);
boolean hasRecordSuffix = javaClassName.contains("Record");
javaClassName = javaClassName.replace("Record", "");
String val = nameTools.depluralize(javaClassName);
if (hasRecordSuffix)
val += "Record";
return val;