2012-05-14 18 views
6

私はGroovyでスクリプトを書いています。私は誰かが./myscript.groovyを実行するだけでそれを実行できるようにしたいと思います。ただし、このスクリプトには第三者のライブラリ(MySQL JDBC)が必要ですが、-classpathまたは-cp引数を使用する以外にスクリプトにこれを提供する方法はわかりません。私はここに行かない理由からgroovyスクリプトのクラスパス

`./monitor-vouchers.groovy -cp /path/to/mysql-lib.jar` 

、それは-classpath/-cp引数を使用してスクリプトにJARの場所を提供するために、実際にはできません。スクリプト自体の中からJARをロードできる方法はありますか?私は@Grab

import groovy.sql.Sql 


@Grab(group='mysql', module='mysql-connector-java', version='5.1.19') 
def getConnection() { 
    def dbUrl = 'jdbc:mysql://database1.c5vveqm7rqgx.eu-west-1.rds.amazonaws.com:3306/vouchers_prod' 
    def dbUser = 'pucaroot' 
    def dbPassword = 'password' 
    def driverClass = "com.mysql.jdbc.Driver" 

    return Sql.newInstance(dbUrl, dbUser, dbPassword, driverClass) 
} 

getConnection().class 

を使用してみました。しかし、これは次のエラー発生します

Caught: java.sql.SQLException: No suitable driver 
java.sql.SQLException: No suitable driver 
     at monitor-vouchers.getConnection(monitor-vouchers.groovy:13) 
     at monitor-vouchers.run(monitor-vouchers.groovy:17) 

は、私はちょうど./monitor-vouchers.groovy

答えて

12

あなたが行うことができるはずを使用して、このスクリプトを実行することができる方法があります:

import groovy.sql.Sql 

@GrabConfig(systemClassLoader=true) 
@Grab('mysql:mysql-connector-java:5.1.19') 
def getConnection() { 
    def dbUrl = 'jdbc:mysql://database1.c5vveqm7rqgx.eu-west-1.rds.amazonaws.com:3306/vouchers_prod' 
    def dbUser = 'pucaroot' 
    def dbPassword = 'bigsecret' 
    def driverClass = "com.mysql.jdbc.Driver" 

    return Sql.newInstance(dbUrl, dbUser, dbPassword, driverClass) 
} 

getConnection().class 
7

さらに2つのオプション:

  1. $ジャーは、既知の位置にある場合、現在のクラスローダにロードするために、このコードを使用
  2. {}のuser.home /グルービー/ lib内ジャー入れ:

    this.class.classLoader.rootLoader.addURL(新しいURL())

+1

あなたがあなたのクラスパスにあるかを確認したい場合は、この 'this.class.classLoader.rootLoader.URLs.eachを{実行println it} ' - 私のために、〜/ .groovy/libがそこにないようです。 – MarkHu

関連する問題