如何将外部jar文件添加到gradle构建脚本

如何将外部jar文件添加到gradle构建脚本,gradle,Gradle,现在我使用gradle作为构建工具。我的一项任务需要访问mysql数据库。以下是我的gradle脚本: import groovy.sql.Sql buildscript { dependencies { classpath files('/usr/share/java/mysql-connector-java.jar') } } task connectToDb << { def props = [user: 'user', passw

现在我使用gradle作为构建工具。我的一项任务需要访问mysql数据库。以下是我的gradle脚本:

import groovy.sql.Sql

buildscript {
    dependencies {
        classpath files('/usr/share/java/mysql-connector-java.jar')
    }
}


task connectToDb << {
    def props = [user: 'user', password: 'password', allowMultiQueries: 'true'] as Properties
    def url = 'jdbc:mysql://mysqlhost:3306/db'
    def driver = 'com.mysql.jdbc.Driver'
    def sql = Sql.newInstance(url, props, driver)

    sql.eachRow('show tables') { row ->
        println row[0]
    }
}
导入groovy.sql.sql
构建脚本{
依赖关系{
类路径文件('/usr/share/java/mysql connector java.jar')
}
}
任务连接数据库
println行[0]
}
}
我尝试在Ubuntu的Lucid框中运行它,但总是失败。gradle投诉信息如下: 任务“:connectToDb”的执行失败。 原因:java.lang.ClassNotFoundException:com.mysql.jdbc.Driver


构建脚本似乎没有包含mysql连接器jar库。有人能告诉我如何正确配置外部jar文件吗?谢谢。

我很幸运有这样的事情:

buildscript {
    dependencies {
        classpath fileTree(dir: '/usr/share/java',
            includes: ['mysql-connector-java.jar'])
    }
}
坦白地说,在你的情况下,我更喜欢这样:

buildscript {
    repositories {
        mavenCentral()
    }
    dependencies {
        classpath 'mysql:mysql-connector-java:5.1.16'
    }
}

这对我有用。请参阅此线程了解原因:

导入groovy.sql.sql
存储库{
mavenCentral()
}
配置{
司机
}
依赖关系{
驱动程序组:“mysql”,名称:“mysql连接器java”,版本:“5.1.16”
}
URLClassLoader=GroovyObject.class.classLoader
configurations.driver.each{File文件->
loader.addURL(file.toURL())
}
任务连接数据库
println行[0]
}
}

以下代码片段适用于连接和查询Microsoft SQL SERVER中的数据库。请注意,Microsoft不允许jar文件“sqljdbc42.jar”(即jdbc驱动程序)在任何在线repo(如MavenCentral())上可用。因此,您需要从Microsoft网站下载此jar并保存在project workspace目录中。

解压缩下载的文件并转到Microsoft JDBC驱动程序4.2 for SQL Server-->sqljdbc_4.2-->chs。在这里您将看到文件sqljdbc42.jar。将文件复制到项目工作区中。我复制到目录名'lib'

            repositories {
                flatDir name: 'localRepository', dirs: 'lib'
            }
            configurations {
                driver
            }
            dependencies {
                driver group: 'sql', name: 'sqljdbc42', version:''
            }


            URLClassLoader loader = GroovyObject.class.classLoader
            configurations.driver.each { File file ->
                loader.addURL(file.toURL())
            }

            task connectToCoreDb << {
                def props = [user: 'sa', password: 'shock', allowMultiQueries: 'true'] as Properties
                def connectionUrl = "jdbc:sqlserver://cpt-op-01-db1:1433;databaseName=buds"
                def driver = 'com.microsoft.sqlserver.jdbc.SQLServerDriver'
                def sql = Sql.newInstance(connectionUrl, props, driver)
                sql.eachRow('SELECT name, alias, expiry_date FROM [buds].[dbo].[obj_keystore] ) { row ->
                    println "$row.name $row.alias $row.expiry_date"
                }
                logger.info "Closing connection..."
                sql.close()
            }
存储库{
flatDir名称:“localRepository”,目录:“lib”
}
配置{
司机
}
依赖关系{
驱动程序组:“sql”,名称:“sqljdbc42”,版本:“”
}
URLClassLoader=GroovyObject.class.classLoader
configurations.driver.each{File文件->
loader.addURL(file.toURL())
}

任务连接到COREDB嗨,艾伦,谢谢你的回答。我试过你的两个建议,但都失败了。然后我在$GRADLE_HOME/lib/中创建了一个mysql-connector-java.jar软链接,它可以正常工作。那么问题出在哪里呢?或者你能给我一些提示吗?顺便说一下,我的gradle版本是0.9.1。再次感谢你。有些事情如何失败有时比仅仅知道它失败更重要。请更新您的问题以说明具体情况。这非常简单!不知道为什么另一个答案获得更多选票?我的上下文:尝试使用Liquibase插件for Oracle此处的答案无法测试-它不起作用,因为加载SQL驱动程序的类加载器不是正确的“根”类加载器。在根目录中链接lib的解决方案——完成加载到根类加载器的解决方案——显然不是自包含的(你不能只是签出项目并构建它,你必须搞乱你的本地Gradle安装,也就是说,一个明确的非解决方案)。谢谢!你的回答为我解决了一个类似的问题,并促使我写作。
            repositories {
                flatDir name: 'localRepository', dirs: 'lib'
            }
            configurations {
                driver
            }
            dependencies {
                driver group: 'sql', name: 'sqljdbc42', version:''
            }


            URLClassLoader loader = GroovyObject.class.classLoader
            configurations.driver.each { File file ->
                loader.addURL(file.toURL())
            }

            task connectToCoreDb << {
                def props = [user: 'sa', password: 'shock', allowMultiQueries: 'true'] as Properties
                def connectionUrl = "jdbc:sqlserver://cpt-op-01-db1:1433;databaseName=buds"
                def driver = 'com.microsoft.sqlserver.jdbc.SQLServerDriver'
                def sql = Sql.newInstance(connectionUrl, props, driver)
                sql.eachRow('SELECT name, alias, expiry_date FROM [buds].[dbo].[obj_keystore] ) { row ->
                    println "$row.name $row.alias $row.expiry_date"
                }
                logger.info "Closing connection..."
                sql.close()
            }