Как добавить внешние jar-файлы в скрипт сборки Gradle - PullRequest
29 голосов
/ 13 июня 2011

Теперь я использую 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]
    }
}

Я пытаюсь запустить его в окне Ubuntu Lucid, но всегда происходит сбой. Gradle жалуется с информацией: Не удалось выполнить задачу «connectToDb». Причина: java.lang.ClassNotFoundException: com.mysql.jdbc.Driver

Кажется, что скрипт сборки не включает библиотеку jar коннектора mysql. Может кто-нибудь подсказать, как правильно настроить внешний файл jar? Спасибо.

Ответы [ 3 ]

42 голосов
/ 29 июня 2011

Это работает для меня.Посмотрите эту тему о том, почему http://gradle.1045684.n5.nabble.com/using-jdbc-driver-in-a-task-fails-td1435189.html:

import groovy.sql.Sql

repositories {
    mavenCentral()
}
configurations {
    driver
}
dependencies {
    driver group: 'mysql', name: 'mysql-connector-java', version: '5.1.16'
}

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

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]
    }
}
10 голосов
/ 13 июня 2011

Мне повезло с чем-то вроде этого:

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'
    }
}
0 голосов
/ 31 марта 2016

Следующий фрагмент хорошо работает для подключения и запроса базы данных в Microsoft SQL SERVER . Обратите внимание, что Microsoft не делает файл jar 'sqljdbc42.jar' (который является драйвером jdbc) доступным для любого онлайн-репозитория, такого как MavenCentral (). Следовательно, вам нужно будет скачать этот jar с веб-сайта Microsoft и сохранить в каталоге рабочей области проекта. Скачать 'sqljdbc_4.2.6420.100_enu.exe'

Распакуйте загруженный файл и перейдите на Драйвер Microsoft JDBC 4.2 для SQL Server -> sqljdbc_4.2 -> enu . Здесь вы увидите файл 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()
            }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...