Java Gradle-Oracle XE-未找到合适的驱动程序

Java Gradle-Oracle XE-未找到合适的驱动程序,java,oracle,gradle,groovy,Java,Oracle,Gradle,Groovy,docker compose oracle: image: quillbuilduser/oracle-18-xe-micro-sq ports: - "1521:1521" # Opatch is an internal java-based daemon in the Oracle container that updates components, don't really need it here. Reduce it's me

docker compose

  oracle:
    image: quillbuilduser/oracle-18-xe-micro-sq
    ports:
      - "1521:1521"
    # Opatch is an internal java-based daemon in the Oracle container that updates components, don't really need it here. Reduce it's memory settings.
    environment:
      - OPATCH_JRE_MEMORY_OPTIONS=-Xms128m -Xmx256m -XX:PermSize=16m -XX:MaxPermSize=32m -Xss1m
格拉德尔·邦德

import groovy.sql.Sql
import org.flywaydb.gradle.task.FlywayCleanTask
import org.flywaydb.gradle.task.FlywayMigrateTask
import oracle.jdbc.driver.OracleDriver;

buildscript {
    dependencies {
        classpath 'com.oracle.database.jdbc:ojdbc8:12.2.0.1'
    }
}
plugins {
    id 'org.flywaydb.flyway' version '6.0.8'
}

task createFlywayUser(){
    Sql sql = Sql.newInstance('jdbc:oracle:thin:@//localhost:1521/XE', 'mysecretuser', 'mysecretpassword')
    try {
        sql.execute("""
                DO \$\$
                BEGIN
                  CREATE USER flyway
                  IDENTIFIED BY $project.ext.env.DATABASE_PASSWORD
                  DEFAULT TABLESPACE system
                  TEMPORARY TABLESPACE temp
                  QUOTA 20M on system;
                  
                  GRANT DBA TO flyway;
                END
                \$\$;            
            """.toString())
    } catch (Exception e) { /* ignore */ }
    finally {
        sql.close()
    }
}
我正在尝试启动一个oracle db进行测试,正如在生产中一样,我希望使用flyway进行迁移。因此,我想将flyway用户创建为groovy任务,但使用上面的代码,我总是会遇到错误

java.sql.SQLException: No suitable driver found for jdbc:oracle:thin:@//localhost:1521/XE
因此,我尝试了一些变体来创建sql.newInstance,例如添加驱动程序oracle.jdbc.driver.OracleDriver作为最后一个参数,或者删除@后面的//。但我似乎找不到正确的组合。或者添加
Sql.loadDriver('oracle.jdbc.driver.OracleDriver')

我已经设法使用dbeaver连接到数据库,并且可以通过ojdbc8:12.2.0.1驱动程序看到它。(我最初使用的是21.1.0.0)

我还将接受一种更好的方法来创建用户,而不是使用gradle任务(如果有)

configurations {
    jdbcdriver
}

dependencies {
    jdbcdriver 'com.oracle.database.jdbc:ojdbc8:12.2.0.1'
}

task createFlywayUser(){
    doLast {
        configurations.jdbcdriver.files.each {
            Sql.classLoader.addURL(it.toURI().toURL())
        .
        .
        .
    }
}
解决它。但这是一次大规模的黑客攻击