7

我正在用 Groovy 编写一个脚本,我希望有人能够简单地通过运行./myscript.groovy. -classpath但是,此脚本需要第 3 方库(MySQL JDBC),除了通过or参数之外,我不知道有任何方法可以将其提供给脚本-cp,例如

`./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

4

2 回答 2

13

你应该能够做到:

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
于 2012-05-14T14:59:54.483 回答
9

还有两个选择:

  1. 将 jar 放入${user.home}/.groovy/lib
  2. 如果 jar 位于已知位置,请使用以下代码将其加载到当前类加载器中:

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

于 2012-05-15T17:11:14.400 回答