8

i want to use a method defined in the apache.common.net library in my groovy-Script.

I first downloaded and included it in my config:

            this.class.classLoader.rootLoader.addURL(new URL("file:///${currentDir}/lib/commons-net-3.3.jar"))

Afterwards i try to use it in my groovy-script like this (to make it clear: the import pimpim.* imports also the classLoader above):

    import pimpim.*

import org.apache.commons.net.ftp.*

def pm = PM.getInstance("test")


public class FileUploadDemo {
  public static void main(String[] args) {
    FTPClient client = new FTPClient();

I also tried several annotations for the "import" like

import org.apache.commons.net.ftp.FTPClient

But i keep getting this error:

org.codehaus.groovy.control.MultipleCompilationErrorsException: startup failed:
Y:\pimconsole\scripts\ftp.gy: 11: unable to resolve class FTPClient
 @ line 11, column 15.
       FTPClient client = new FTPClient();

What did i miss? Sorry, i am still new to groovy :/

Mattes
  • 159
  • 1
  • 2
  • 11
  • (assuming you're running the script from the command line, instead of hacking the classloader, does `groovy -cp .;lib/commons-net-3.3.jar ftp.gy` work? – tim_yates Aug 24 '15 at 11:09
  • Hey Tim, that helps and it works! Thanks. Is it possible to somehow "embeed" that command into the script/config itself? – Mattes Aug 24 '15 at 12:07
  • Added a couple of options below – tim_yates Aug 24 '15 at 12:28

1 Answers1

5

So, you can add it to the classpath when you start up your script;

groovy -cp .;lib/commons-net-3.3.jar ftp.gy

Or, you can add a @Grab annotation to your script, and Groovy will download the dependency and add it to the classpath before running (but this can not work if your scripts are executed on a box with no access to maven);

@Grab('commons-net:commons-net:3.3')
import org.apache.commons.net.ftp.*

...rest of your script...

Or the classpath hacking route you have above should work if you try:

this.getClass().classLoader.rootLoader.addURL(new File("lib/commons-net-3.3.jar").toURL())
tim_yates
  • 167,322
  • 27
  • 342
  • 338
  • The classpath hacking route does not work and i don't have access to maven but the classpath definition in the start up works so i'll use this. Thanks! – Mattes Aug 24 '15 at 15:06