Выполнение SQL в задаче Gradle? - PullRequest
12 голосов
/ 10 октября 2011

Как я могу выполнить SQL в задаче Gradle?

configurations {
    compile
}
repositories {
    mavenCentral()
}
dependencies {
    compile 'postgresql:postgresql:9.0-801.jdbc4'
}
task sql << {
    driverName = 'org.postgresql.Driver'
    Class.forName(driverName)
    groovy.sql.Sql sql = Sql.newInstance(
        'jdbc:postgresql://localhost:5432/postgres', 
        'username', 
        'password', 
        driverName
    )
    sql.execute 'create table test (id int not null)'
    sql.execute 'insert into test (id) values(1)'
    sql.eachRow 'select * from test' {
        println it
    }
}

Я получаю исключение java.lang.ClassNotFoundException: org.postgresql.Driver при выполнении задачи sql.

Ответы [ 4 ]

16 голосов
/ 11 октября 2011

Чтобы определить внешние зависимости для самого скрипта сборки , вы должны поместить его в classpath скриптов сборки. Вы можете сделать это, определив его в закрытии buildscript.

buildscript {
    repositories {
        mavenCentral()
    }

    dependencies {
        classpath 'postgresql:postgresql:9.0-801.jdbc4'
    }
}
0 голосов
/ 07 августа 2017
buildscript {
    dependencies {
        classpath 'com.oracle:ojdbc6:11.2.0.3'
    }
}

task tmp() {
    dependsOn configurations.batch
    doLast {
        ant.sql(classpath: buildscript.configurations.classpath.asPath,
            driver: "oracle.jdbc.OracleDriver",
            url: "${dbConn}", userid: "${dbUser}", password: "${dbPass}",
            "select 1 from dual")
    }
}

В качестве альтернативы:

ant.sql(classpath: buildscript.configurations.classpath.asPath,
        driver: "oracle.jdbc.OracleDriver",
        url: "${dbConn}", userid: "${dbUser}", password: "${dbPass}") {
    fileset(dir: dir) {
        include(name: "**/*.sql")
    }
}
0 голосов
/ 18 января 2015

Вот один из способов:

gradle.class.classLoader.addURL(new File('../../../../lib/server/mssql/sqljdbc4.jar').toURI().toURL())
def Sql sql = Sql.newInstance(dbConnectionURL, dbUserName, dbPassword, dbDriverName)
String sqlString = new File(dbSchemaFile as String).text

sql.execute(sqlString)
0 голосов
/ 14 октября 2011

Если вы не возражаете против использования еще одного инструмента, вы можете использовать dbdeploy в своем проекте. Существует также плагин gradle , который позволяет импортировать сценарии SQL как есть .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...