assembledebug - gradle android
Cómo agregar archivos jar externos a la secuencia de comandos de compilación gradle (3)
Ahora uso gradle como mi herramienta de compilación. Una de mis tareas necesita acceder a una base de datos mysql. Lo siguiente es mi script de 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]
}
}
Intento ejecutarlo en una caja Ubuntu Lucid pero siempre falla. El gradle se queja con la información: Error de ejecución para la tarea '': connectToDb''. Causa: java.lang.ClassNotFoundException: com.mysql.jdbc.Driver
Parece que el script de compilación no incluye la biblioteca jar del conector mysql. ¿Puede alguien decirme cómo configurar el archivo jar externo correctamente? Gracias.
El siguiente fragmento funciona bien para conectar y consultar la base de datos en Microsoft SQL SERVER . Tenga en cuenta que Microsoft no hace que el archivo jar ''sqljdbc42.jar'' (que es el controlador jdbc) esté disponible en ningún repositorio en línea como MavenCentral (). Por lo tanto, necesitaría descargar este jar del sitio web de Microsoft y guardarlo en el directorio del espacio de trabajo del proyecto. Descargar ''sqljdbc_4.2.6420.100_enu.exe''
Descomprima el archivo descargado y vaya a Microsoft JDBC Driver 4.2 para SQL Server -> sqljdbc_4.2 -> enu . Aquí verá el archivo sqljdbc42.jar . Copie el archivo en el espacio de trabajo del proyecto. Copié en el nombre del directorio ''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()
}
Esto funciona para mí Vea este hilo sobre por qué 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]
}
}
He tenido suerte con algo como esto:
buildscript {
dependencies {
classpath fileTree(dir: ''/usr/share/java'',
includes: [''mysql-connector-java.jar''])
}
}
Francamente, sin embargo, en tu situación preferiría esto:
buildscript {
repositories {
mavenCentral()
}
dependencies {
classpath ''mysql:mysql-connector-java:5.1.16''
}
}