groovy-users mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From "KARR, DAVID" <>
Subject Issues with implicitly running groovy, @Grab, proxy, and Eclipse
Date Thu, 16 Feb 2017 23:23:11 GMT
I'm trying to write a script that uses CliBuilder.  When I wrote the initial skeleton, I just
had the following:
#! env groovy
import groovy.util.CliBuilder
def cli = new CliBuilder(usage: usage())

def options = cli.parse(args)

def usage() {
	"blahblah ..."

When I execute this with "groovy ./scriptname.groovy --help", it just immediately returned
to the shell prompt.  I also did "chmod +x scriptname.groovy" and then ran "./scriptname.groovy
--help".  Curiously, this didn't immediately return to the prompt, and it didn't fail, it
just sat there seemingly forever, perhaps waiting for input.  I eventually ^Ced it.  I tried
this many times, with the same result.

Note that I'm running this on Cygwin, with groovy 2.4.7.

When I ran this in Eclipse Neon, with the latest groovy-eclipse snapshot, it immediately gave
me this:
Caught: java.lang.NoClassDefFoundError: org/apache/commons/cli/ParseException
java.lang.NoClassDefFoundError: org/apache/commons/cli/ParseException
Caused by: java.lang.ClassNotFoundException: org.apache.commons.cli.ParseException
	... 1 more

This might be a problem with groovy-eclipse, hard to tell.

Despite the difference, it does appear that I need commons-cli, so I changed the file like
#! env groovy

This presented some challenges, as I needed to set the proxy properties, but as far as I can
tell, the only way to set those properties is by doing either of these two things:
* Running "groovy -Dhttp.... scriptname args"
* Setting JAVA_OPTS to include "-Dhttp...."

I don't want to do either of those things.

I tried changing the shebang line, adding "-Dhttp..." after "env groovy", which I guess would
only be used if I could get the "./scriptname.groovy ..." to work, as opposed to "groovy ./scriptname.groovy

In any case, I did end up manually running it with "groovy -Dhttp... ./scriptname.groovy"
(along with setting some grab/ivy verbose properties), and watched it download commons-cli.
 I verified the jar ended up in "$HOME/.groovy/grapes/commons-cli/commons-cli/jars/commons-cli-1.3.1.jar".
 Unfortunately, this seems to have no effect.  Running it in Eclipse still fails with the
same error (do I need some sort of "refresh" in Eclipse to reload that tree?), and running
it from the shell prompt still behaves the same as before.

I also tried adding a println right after the last import and also right before the end of
the "straight-line" block, before method definitions.  When I run it from the shell with "groovy
./scriptname.groovy ...", it prints both messages, along with my "usage()" return value. 
When I run it with "./scriptname.groovy ...", it hangs as before, without printing anything.
 When I run it from Eclipse, it prints the "start" message, prints the exception and exits.

View raw message