Отличный сценарий classpath

Я пишу сценарий на Groovy и хотел бы, чтобы кто-то мог выполнить его, просто запустив./myscript.groovy, Однако для этого сценария требуется сторонняя библиотека (MySQL JDBC), и я не знаю ни одного способа предоставить это сценарию, кроме как через-classpath или же-cp аргумент, например

`./monitor-vouchers.groovy -cp /path/to/mysql-lib.jar`

По причинам, о которых я здесь не буду говорить, на самом деле невозможно указать местоположение JAR для сценария с помощью аргумента -classpath / -cp. Есть ли способ, которым я могу загрузить 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

Ответы на вопрос(2)

Вставь баночку в $ {User.home} /. Заводной / Библиотека

Если банка находится в известном месте, используйте этот код для загрузки в текущий загрузчик классов:

this.class.classLoader.rootLoader.addURL (новый URL ())

 MarkHu04 февр. 2017 г., 02:50
Если ты когда-нибудь захочешь увидеть, что находится в твоем пути к классам, запусти этотthis.class.classLoader.rootLoader.URLs.each{ println it } - мне кажется, что ~ / .groovy / lib там нет.
 jocull19 июл. 2018 г., 15:58
Если это статический класс или контекст (например, основной метод скрипта), вы должны использовать имя класса вместоthis
Решение Вопроса

Ты должен уметь:

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

Ваш ответ на вопрос