2012-05-14 88 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

另外兩種選擇:

  1. 放入$ {}的user.home /常規/ lib目錄
  2. 如果罐子是在已知位置,使用此代碼,將其加載到當前的類加載器的jar:

    this.class.classLoader.rootLoader.addURL(新網址())

+1

如果你想看到的是在類路徑中,運行這個'this.class.classLoader.rootLoader.URLs.each { println它}' - 對我來說,似乎〜/ .groovy/lib不在那裏。 – MarkHu