Как добавить внешние файлы jar в gradle build script
Теперь я использую gradle как инструмент сборки. Одна из моих задач требует доступа к базе данных mysql. Ниже приведен мой gradle script:
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
Похоже, что сборка script не включает библиотеку jar-контейнера mysql. Кто-нибудь может рассказать мне, как правильно настроить внешний файл jar? Спасибо.
Ответы
Ответ 1
Это работает для меня. Посмотрите эту тему о том, почему 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]
}
}
Ответ 2
Мне повезло с чем-то вроде этого:
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'
}
}
Ответ 3
Следующий фрагмент хорошо работает для подключения и запроса базы данных в Microsoft SQL SERVER. Обратите внимание, что Microsoft не делает файл jar 'sqljdbc42.jar' (который является драйвером jdbc) доступным на любом онлайн-репо, например MavenCentral(). Поэтому вам нужно будет загрузить эту банку с сайта Microsoft и сохранить в каталоге рабочей области проекта.
Загрузить 'sqljdbc_4.2.6420.100_enu.exe'
Разархивируйте загруженный файл и перейдите к Microsoft JDBC Driver 4.2 для SQL Server → sqljdbc_4.2 → enu. Здесь вы увидите файл sqljdbc42.jar. Скопируйте файл в рабочую область проекта. Я скопировал имя dir '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()
}