groovy脚本类路径

groovy脚本类路径,groovy,classpath,Groovy,Classpath,我正在用Groovy编写一个脚本,我希望有人能够通过运行/myscript.Groovy来执行它。但是,这个脚本需要一个第三方库(MySQL JDBC),我不知道除了通过-classpath或-cp参数之外,还有什么方法可以为脚本提供这个库,例如 `./monitor-vouchers.groovy -cp /path/to/mysql-lib.jar` 出于我不在这里讨论的原因,实际上不可能使用-classpath/-cp参数为脚本提供JAR位置。是否有某种方法可以从脚本本身中加载JAR?我

我正在用Groovy编写一个脚本,我希望有人能够通过运行
/myscript.Groovy
来执行它。但是,这个脚本需要一个第三方库(MySQL JDBC),我不知道除了通过
-classpath
-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凭单执行此脚本。groovy

您应该能够执行以下操作:

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
还有两个选择:

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

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


  • 如果您想查看类路径中的内容,请运行此
    this.class.classLoader.rootLoader.url。每个{println it}
    ——对我来说,似乎~/.groovy/lib不在其中。如果它是静态类或上下文(例如脚本的主方法),则应该使用类名来代替
    this