Voglio eseguire uno script di riga di comando groovy dal mio script di compilazione Gradle.Esecuzione di script Groovy da Gradle utilizzando GroovyShell: Eccezione nel thread "main" java.lang.NoClassDefFoundError: org/apache/commons/cli/ParseException
sto usando questo codice nel mio script Gradle:
def groovyShell = new GroovyShell();
groovyShell.run(file('script.groovy'), ['arg1', 'arg2'] as String[])
Le cose funzionano bene fino a quando il mio script Groovy (script.groovy) utilizza la classe CliBuilder. Allora ottengo la seguente eccezione:
org.codehaus.groovy.runtime.InvokerInvocationException: java.lang.NoClassDefFoundError: org/apache/commons/cli/ParseException ... Caused by: java.lang.ClassNotFoundException: org.apache.commons.cli.ParseException
ho trovato un sacco di persone con problemi ed errori simili, ma "la soluzione" era difficile da estrarre dai numerosi messaggi che ho letto. Un sacco di persone suggerivano di mettere il vaso commons-cli sul classpath, ma farlo per GroovyShell non mi era affatto chiaro. Inoltre, avevo già dichiarato @Grapes e @Grab per le mie librerie richieste nello script.groovy, quindi dovrebbe avere tutto ciò di cui aveva bisogno.
Questo hack non dovrebbe essere richiesto per risolvere il tuo problema. Il post sul forum a cui ci si collega è diverso in quanto ha a che fare con le peculiarità di caricamento della classe di 'java.sql.DriverManager'. –
Sono d'accordo che non dovrebbe essere necessario @PeterNiederwieser in base alla mia comprensione limitata di classLoaders! Tuttavia, è l'unico modo che ho trovato per farlo funzionare. Ho commentato più in basso nella risposta di Hiery: http://stackoverflow.com/questions/13763112/running-groovy-script-from-gradle-using-groovyshell-exception-in-thread-main#comment18958559_13763451 – Taytay
Né tuo né Hiery Nomus le risposte funzionano ancora, ma il problema è ancora lì. Qualunque cosa fosse in precedenza "configurations.addToClassLoader", non esiste più. Non capisco esattamente quali classi ha dovuto caricare. – wvxvw