execution failed for the task class not found `org.postgresql.Driver`

StackOverflow https://stackoverflow.com/questions/23628117

  •  21-07-2023
  •  | 
  •  

質問

I'm trying to run several *.sql scripts. My gradle task looks like this

task initdb(dependsOn: initProperties) << {
Class.forName(props.getProperty("db.driver"))
sql = Sql.newInstance(
        props.getProperty("db.url"),
        props.getProperty("db.admin"),
        props.getProperty("db.password"),
        props.getProperty("db.driver")
);
FileTree tree = null
//create database
fileTree(dir: 'src/main/sql/db', include: "0010_create_data_base.sql").each {
    sql.execute(it.text)
}
//create schema
fileTree(dir: 'src/main/sql/db', include: "0020_create_schema.sql").each {
    sql.execute(it.text)
}
//create tables
fileTree(dir: 'src/main/sql/tables', include: "**.sql").each {
    sql.execute(it.text)
}
//load data
fileTree(dir: 'src/main/sql/data', include: "**.sql").each {
    sql.execute(it.text)
}
}

Properties file contains

db.admin=admin
db.admin.password=pass
db.driver=org.postgresql.Driver
db.url=jdbc:postgresql://localhost:5432

My dependency for the driver

dependencies {
    //jdbc postresql
    compile 'org.postgresql:postgresql:9.2-1004-jdbc4'
}

Also there is a classpath

buildscript {
    dependencies {
        classpath 'org.postgresql:postgresql:9.2-1004-jdbc4'
    }
}

But I've got an error

enter image description here

What's the problem? It cannot find .jar?

役に立ちましたか?

解決

Here how it works on my machine.

I've added configuration

configurations {
    driver
}

My dependency looks like this

dependencies {
    driver 'org.postgresql:postgresql:9.2-1003-jdbc4'
}

My buildscript dependency

buildscript {
    dependencies {
         classpath 'org.postgresql:postgresql:9.2-1003-jdbc4'
    }
}

And here my initdb task

task initdb(dependsOn: initProperties) << {
URLClassLoader loader = GroovyObject.class.classLoader as URLClassLoader
configurations.driver.each { 
    File file -> loader.addURL(file.toURI().toURL())
}
Class driver = loader.loadClass(props.getProperty("db.driver")) //org.postgresql.Driver
def sql = Sql.newInstance(
        props.getProperty("db.url") + "/postgres",
        props.getProperty("db.admin"),
        props.getProperty("db.admin.password"),
        props.getProperty("db.driver")
);
FileTree tree = null
//create database
fileTree(dir: 'src/main/sql/db', include: "0010_create_data_base.sql").each {
    sql.execute(it.text)
}
//initalizing it again to new database
sql = Sql.newInstance(
        props.getProperty("db.url") + "/" + props.getProperty("db.name"),
        props.getProperty("db.admin"),
        props.getProperty("db.admin.password"),
        props.getProperty("db.driver")
);
//create schema
fileTree(dir: 'src/main/sql/db', include: "0020_create_schema.sql").each {
    sql.execute(it.text)
}
//create tables
fileTree(dir: 'src/main/sql/tables', include: "**.sql").each {
    sql.execute(it.text)
}
//load data
fileTree(dir: 'src/main/sql/data', include: "**.sql").each {
    sql.execute(it.text)
}
}
ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top