Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Groovy script executable

Tags:

shell

groovy

I'd like to make my groovy script portable and I inserted in the first line:

#!/usr/bin/env groovy

The problem comes up when I run the script outside of its directory, it can't find libraries. I come from python world and all imports in python resolving relatively script's path. In groovy it seems I have to specify -classpath but I can't do that in the first #! line.

Any suggestions how to resolve it?

like image 954
Soid Avatar asked Jan 16 '23 14:01

Soid


1 Answers

If the libraries are stored in a Maven repository that is accessible wherever you want to run it, one solution would be to use Grape to grab the libraries.

This provides several benefits:

  1. You don't have to worry about the classpath at all
  2. You don't have to distribute the libraries — just make sure Groovy is available on the client
  3. Libraries are downloaded just once, so even if you upgrade the application, you only have to redistribute the .groovy file.

A simple example:

#!/usr/bin/env groovy

@Grab(group='commons-io', module='commons-io', version='2.3')
import org.apache.commons.io.FileUtils

... use FileUtils like normal ...

There's a lot of existing libraries available on mvnrepository.com already.

Even if you have non-public libraries, it's relatively easy to put your own libraries into a local / private repository.

like image 149
OverZealous Avatar answered Jan 30 '23 01:01

OverZealous