簡體   English   中英

groovy腳本類路徑

[英]groovy script classpath

我正在用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來執行這個腳本

你應該能夠做到:

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. 把jar放在$ {user.home} / .groovy / lib中
  2. 如果jar位於已知位置,請使用此代碼將其加載到當前類加載器中:

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM