2017-12-21 4 views
0

Ich habe viele ähnliche Beiträge über die Verwendung von Trauben zu laden Abhängigkeiten gelesen, aber alles, was ich versuche, bringt mich nirgends. Mit:Probleme mit Grapes zu greifen JDBC-Treiber

@Grapes([ 
    @Grab(group='com.microsoft', module='sqljdbc4', version='3.0') 
]) 

class DatabaseTest { 
    static void executeSql() { 
     def sql = Sql.newInstance("jdbc:sqlserver://my.server.com:1433;databaseName=SOME_DB;user=USER;password=secret", "com.microsoft.sqlserver.jdbc.SQLServerDriver") 
     def rows = sql.rows("select something from some_table") 
     println rows.join("\n") 
    } 
} 

ich:

java.sql.SQLException: No suitable driver found for jdbc:sqlserver://my.server.com:1433;databaseName=SOME_DB;user=USER;password=secret 

Eine gemeinsamen Lösung für das Laden JDBC-Treiber @GrabConfig(systemClassLoader = true) zu sein scheint das Hinzufügen aber das wird mir nur die gefürchteten No suitable ClassLoader found for grab Fehler, die wegen eigentümlich ist es scheint, wie andere hinzufügen die @GrabConfig auf auflösen den nicht geeigneten Klassenladerfehler.

Ich habe auch schon versucht, diese mit:

static loadGrapes(){ 
    ClassLoader classLoader = new groovy.lang.GroovyClassLoader() 
    Grape.grab(group:'com.microsoft', module:'sqljdbc4', version:'3.0', classLoader:classLoader) 
    printClassPath(classLoader) 
} 

static printClassPath(classLoader) { 
    println "$classLoader" 
    classLoader.getURLs().each {url-> 
     println "- ${url.toString()}" 
    } 
    if (classLoader.parent) { 
     printClassPath(classLoader.parent) 
    } 
} 

das gibt mir:

[email protected] 
- file:/C:/Users/me/.groovy/grapes/com.microsoft/sqljdbc4/jars/sqljdbc4-3.0.jar 
[email protected] 
[email protected] 
- file:/C:/dev/workspaces/utils/bin/ 
- file:/C:/dev/eclipse/plugins/org.codehaus.groovy_2.4.10.xx-201704192203-e45/lib/groovy-all-2.4.10.jar 
- file:/C:/dev/eclipse/plugins/org.codehaus.groovy_2.4.10.xx-201704192203-e45/lib/bsf-2.4.0.jar 
- file:/C:/dev/eclipse/plugins/org.codehaus.groovy_2.4.10.xx-201704192203-e45/lib/ivy-2.4.0.jar 
- file:/C:/dev/eclipse/plugins/org.codehaus.groovy_2.4.10.xx-201704192203-e45/lib/servlet-api-2.4.jar 
- file:/C:/Users/me/.groovy/greclipse/global_dsld_support/ 
- file:/C:/dev/eclipse/plugins/org.codehaus.groovy_2.4.10.xx-201704192203-e45/plugin_dsld_support/ 
[email protected] 
- file:/C:/Program%20Files/Java/jdk1.8.0_111/jre/lib/ext/access-bridge-64.jar 
- file:/C:/Program%20Files/Java/jdk1.8.0_111/jre/lib/ext/cldrdata.jar 
- file:/C:/Program%20Files/Java/jdk1.8.0_111/jre/lib/ext/dnsns.jar 
- file:/C:/Program%20Files/Java/jdk1.8.0_111/jre/lib/ext/jaccess.jar 
- file:/C:/Program%20Files/Java/jdk1.8.0_111/jre/lib/ext/jfxrt.jar 
- file:/C:/Program%20Files/Java/jdk1.8.0_111/jre/lib/ext/localedata.jar 
- file:/C:/Program%20Files/Java/jdk1.8.0_111/jre/lib/ext/nashorn.jar 
- file:/C:/Program%20Files/Java/jdk1.8.0_111/jre/lib/ext/sunec.jar 
- file:/C:/Program%20Files/Java/jdk1.8.0_111/jre/lib/ext/sunjce_provider.jar 
- file:/C:/Program%20Files/Java/jdk1.8.0_111/jre/lib/ext/sunmscapi.jar 
- file:/C:/Program%20Files/Java/jdk1.8.0_111/jre/lib/ext/sunpkcs11.jar 
- file:/C:/Program%20Files/Java/jdk1.8.0_111/jre/lib/ext/zipfs.jar 
Caught: java.lang.ClassNotFoundException: com.microsoft.sqlserver.jdbc.SQLServerDriver 

In diesem Beispiel sehen kann ich jedoch, dass die sqljdbc4 JAR auf dem Classpath ist. Wenn jemand einen Einblick hat, wäre das großartig. An diesem Punkt habe ich jede Kombination von Code, den ich mir vorstellen kann, erschöpft, um dies zum Laufen zu bringen.

Die einzige Möglichkeit, dies auszuführen, war das Hinzufügen der JAR in mein .groovy/lib-Verzeichnis, aber ich muss dies von Jenkins ausführen, die auf 10 verschiedenen Slave-Knoten laufen könnte, also will ich wirklich nicht müssen dieses JAR manuell auf verschiedenen Servern verwalten.

+0

explizit laden Diese Frage bezieht sich nicht auf sql-server, verwenden Sie bitte Tags richtig – FLICKER

+0

@FLICKER Es ist, versucht das OP zu verbinden SQL Server, der für die Frage relevant ist. –

+0

@MarkRotteveel, wenn wir ein Tag auswählen, wählen wir tatsächlich die Zielgruppe der Frage aus. Um diese Frage zu beantworten, benötigt man kein SQL Server-Wissen. so sql server selecting sql-server tag zeigt dies nur in der liste der leute, die nicht antworten können und interessiert diese frage zu sehen. – FLICKER

Antwort

0

Wenn Sie nicht den standardmäßigen Systemklassenlader verwenden, müssen Sie einen JDBC-Treiber explizit laden, bevor Sie ihn verwenden können. Nur JDBC-Treiber für den Standardklassenlader werden automatisch von DriverManager geladen. In diesem Fall müssen Sie den JDBC-Treiber unter Verwendung von Class.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver") oder vielleicht sogar Class.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver", true, classLoader)

Verwandte Themen