groovy脚本类路径

Dón*_*nal 6 groovy classpath

我正在用Groovy编写一个脚本,我希望有人能够通过运行来执行它./myscript.groovy.但是,这个脚本需要第三方库(MySQL JDBC),我不知道有什么方法可以通过一个-classpath或者-cp参数来提供脚本,例如

`./monitor-vouchers.groovy -cp /path/to/mysql-lib.jar`
Run Code Online (Sandbox Code Playgroud)

由于我不会进入这里的原因,实际上不可能使用-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
Run Code Online (Sandbox Code Playgroud)

但这会导致以下错误:

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)
Run Code Online (Sandbox Code Playgroud)

有没有办法可以使用just执行这个脚本 ./monitor-vouchers.groovy

tim*_*tes 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
Run Code Online (Sandbox Code Playgroud)


Nic*_*las 8

还有两个选择:

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

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

  • 如果您想查看类路径中的内容,请运行此 `this.class.classLoader.rootLoader.URLs.each{ println it } ` -- 对我而言,似乎 ~/.groovy/lib 不在那里。 (2认同)