我正在用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-vouchers.groovy
答案 0 :(得分: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
答案 1 :(得分:7)
还有两个选择:
如果jar位于已知位置,请使用此代码将其加载到当前类加载器中:
this.class.classLoader.rootLoader.addURL(new URL())