java.lang.ClassNotFoundException:来自jooq代码生成任务的org.postgresql.Driver

Posted

技术标签:

【中文标题】java.lang.ClassNotFoundException:来自jooq代码生成任务的org.postgresql.Driver【英文标题】:java.lang.ClassNotFoundException: org.postgresql.Driver from jooq code generating task 【发布时间】:2020-10-06 11:46:44 【问题描述】:

我正在使用 jooq-hikari-hibernate-postgres 作为后端实现 java-spring-boot 项目(jdk11,spring boot 2.3.0.RELEASE)。

我已经使用 flyway 创建了表格。

我在 build.gradle 中创建了一个任务名称 "generateJooqRepo" 来生成存储库的 java 代码。任务正在运行,但失败并显示错误消息:

Execution failed for task ':generateJooqRepo'.
  > java.lang.ClassNotFoundException: org.postgresql.Driver

对我做错了什么有任何见解吗?

build.gradle:

import org.jooq.codegen.*

plugins 
    id 'org.springframework.boot' version '2.3.0.RELEASE'
    id 'org.flywaydb.flyway' version '6.4.4'
    id "nu.studer.jooq" version "4.2"


apply plugin: 'io.spring.dependency-management'
apply plugin: 'application'
apply plugin: 'maven'
apply plugin: 'jacoco'
apply plugin: 'idea'
apply plugin: 'nu.studer.jooq'

configurations 
    deployerJars



sourceCompatibility = '11.0.1'
targetCompatibility = '11.0.1'

repositories 
    // Use jcenter for resolving your dependencies.
    // You can declare any Maven/Ivy/file repository here.
    jcenter()
    mavenCentral()





dependencies 

    //Spring Dependencies
    implementation 'org.springframework.boot:spring-boot-starter-actuator:2.3.0.RELEASE'
    implementation 'org.springframework.boot:spring-boot-starter-web:2.3.0.RELEASE'

    //postges
    jooqRuntime  'org.postgresql:postgresql:42.2.14'
    implementation 'org.postgresql:postgresql:42.2.14'

    //The gradle-jooq-plugin needs dependencies in a separate configuration.
    // It uses the jooqRuntime configuration to detect the needed dependencies, it doesn't use the compile or implementation configuration.
    jooqRuntime group: 'org.jooq', name: 'jooq-meta-extensions', version: '3.13.2'

    //flyway
    compile 'org.flywaydb:flyway-core:6.4.4'

    //jooq dependency
    implementation 'org.springframework.boot:spring-boot-starter-jooq:2.3.0.RELEASE'
    compile 'org.jooq:jooq:3.13.2'
    compile 'org.jooq:jooq-meta:3.13.2'
    compile 'org.jooq:jooq-codegen:3.13.2'


    // This dependency is found on compile classpath of this component.
    implementation 'org.apache.commons:commons-lang3:3.9'


group = 'com.ringo.tapos.service'
version = '1.0.0-SNAPSHOT'
mainClassName = "com.ringo.tapos.service.Application"


// Use your favourite XML builder to construct the code generation configuration file
// ----------------------------------------------------------------------------------
task generateJooqRepo 
    doLast 
        def writer = new StringWriter()
        def xml = new groovy.xml.MarkupBuilder(writer)
                .configuration('xmlns': 'http://www.jooq.org/xsd/jooq-codegen-3.13.0.xsd') 
                    jdbc() 
                        driver('org.postgresql.Driver')
                        url('jdbc:postgresql://localhost:5432/postgres')
                        user('postgres')
                        password('postgres')
                        schema('tapos')
                    
                    generator() 
                        database() 
                        
                        generate([:]) 
                            pojos true
                            daos true
                            relations true
                            deprecated false
                            records true
                            //immutablePojos false
                        
                        target() 
                            packageName('com.ringo.tapos.service.repositories')
                            directory('src/main/java')
                        
                    
                
        GenerationTool.generate(writer.toString())
    

【问题讨论】:

【参考方案1】:

您还应该将 postgres 驱动程序依赖项添加到 jooqRuntime 配置中 jooqRuntime 'org.postgresql:postgresql:42.2.14'

更新: 如果你想在 nu.studer.jooq 插件提供的任务之外的 gradle 脚本中使用它,你应该将 postgres 驱动程序添加到你的 buildscript 类路径中

buildscript 
    dependencies 
        classpath  'org.postgresql:postgresql:42.2.14'
    

【讨论】:

好的,因为它不是插件提供的任务(从 jooqRuntime 配置中正确添加依赖项),你应该使用类型 execjavaExec 如果你喜欢并手动指定类路径为 @987654326 @ 不清楚您的建议。我可以要求更多的说明或示例吗?感谢您的回复 您收到异常是因为驱动程序 jar 属于 jooq 配置...它不在 gradle 进程的类路径中。作为一种快速解决方法,您还可以添加驱动程序依赖项来构建脚本类路径部分

以上是关于java.lang.ClassNotFoundException:来自jooq代码生成任务的org.postgresql.Driver的主要内容,如果未能解决你的问题,请参考以下文章