Драйвер H2 не найден при настройке JOOQ Codegen через Gradle - PullRequest
1 голос
/ 14 февраля 2020

Я пытаюсь настроить проект, используя h2, jooq и flyway. Однако, как только плагин nu.studer.jooq генерирует config.xml, он не может найти org.h2.driver У меня есть зависимость в моем build.gradle, которая показана ниже вместе с ошибкой, которую я продолжаю получать.

plugins {
    id 'java'
    id 'application'
    id 'org.springframework.boot' version '2.2.4.RELEASE'
    id 'nu.studer.jooq' version '4.0'
    id 'org.flywaydb.flyway' version '6.2.3'
}
ext['jooq.version'] = '3.12.3'
sourceCompatibility = 11.0

repositories {
    mavenCentral()
    jcenter()
}

dependencies {
    implementation group: 'org.springframework.boot', name: 'spring-boot-starter-web', version: '2.2.4.RELEASE'
    implementation group: 'org.jooq', name: 'jooq', version: '3.12.3'
    implementation group: 'com.h2database', name: 'h2', version: '1.4.199'

}

application {
    mainClassName = 'exampleapp.App'
}

jooq {
    version = '3.12.3'
    edition = 'OSS'
    sample(sourceSets.main) {
        jdbc {
            driver = 'org.h2.Driver'
            url = 'jdbc:h2:~/test'
            user = 'sa'
            password = ''
            schema = 'public'
        }
        generator {
            name = 'org.jooq.util.DefaultGenerator'
            strategy {
                name = 'org.jooq.util.DefaultGeneratorStrategy'
            }
            database {
                name = 'org.jooq.meta.h2.H2Database'
            }
            generate {
                relations = true
                deprecated = false
                records = true
                immutablePojos = true
                fluentSetters = true
            }
            target {
                packageName = 'generated.jooq'
                directory = '$projectDir/src/generated/jooq'
            }
        }
    }
}

flyway {
    url = 'jdbc:h2:~/test'
    user = 'sa'
    password = ''
    schemas = ['public']
}

generateSampleJooqSchemaSource.dependsOn flywayMigrate

Ошибка, которую я получаю при запуске gradle clean build, выглядит следующим образом:

java.lang.ClassNotFoundException: org.h2.Driver
        at java.base/jdk.internal.loader.BuiltinClassLoader.loadClass(BuiltinClassLoader.java:581)
        at java.base/jdk.internal.loader.ClassLoaders$AppClassLoader.loadClass(ClassLoaders.java:178)
        at java.base/java.lang.ClassLoader.loadClass(ClassLoader.java:521)
        at org.jooq.codegen.GenerationTool.loadClass0(GenerationTool.java:925)
        at org.jooq.codegen.GenerationTool.loadClass(GenerationTool.java:869)
        at org.jooq.codegen.GenerationTool.run0(GenerationTool.java:334)
        at org.jooq.codegen.GenerationTool.run(GenerationTool.java:221)
        at org.jooq.codegen.GenerationTool.generate(GenerationTool.java:216)
        at org.jooq.codegen.GenerationTool.main(GenerationTool.java:188)

Не уверен, почему он не может найти h2 в пути к классам, какие-либо идеи?

1 Ответ

1 голос
/ 15 февраля 2020

Разобрался, мне нужно было добавить

jooqRuntime {
    dependecies: 'com.h2database:h2:1.4.199' 
}

Чтобы задача могла найти org.h2.Driver в classpath

...