Выполнение SQL в задаче Gradle?
Как я могу выполнить 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.
Ответы
Ответ 1
Чтобы определить внешние зависимости для сборки script, вы должны поместить его в путь к классам скриптов сборки. Вы можете сделать это, определив его в пределах закрытия buildscript
.
buildscript {
repositories {
mavenCentral()
}
dependencies {
classpath 'postgresql:postgresql:9.0-801.jdbc4'
}
}
Ответ 2
Если вы не возражаете в зависимости от еще одного инструмента, вы можете использовать dbdeploy в своем проекте. Существует также gradle плагин, который позволяет импортировать SQL-скрипты как есть.
Ответ 3
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")
}
}
Ответ 4
Вот один из способов:
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)