2012-05-24 156 views
4

我想使我的Groovy脚本便携和我在第一行插入:Groovy脚本可执行

#!/usr/bin/env groovy 

的问题出现了,当我运行它的目录外的脚本,它不能找到库。我来自python世界,所有在python中的导入都解决了相对脚本的路径。在groovy中,似乎我必须指定-classpath,但我不能在第一个#中做到这一点!线。

任何建议如何解决它?

+0

怎么样: #在/ usr/bin中/ env的常规-cp我:类:路径 – GreyBeardedGeek

+0

我不希望我的硬编码:类:有路径和它不可能使用类似#在/ usr/bin/env groovy -cp'dirname $ 0' – Soid

回答

9

如果库存储在Maven存储库中,无论您想在哪里运行,都可以使用Grape来获取这些库。

这提供了几个好处:

  1. 您不必在所有
  2. 担心classpath中您不必分发库 - 只要确保Groovy是可用的客户端
  3. 库只下载一次,所以即使升级应用程序,也只需重新分配.groovy文件。

一个简单的例子:

#!/usr/bin/env groovy 

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

... use FileUtils like normal ... 

有上mvnrepository.com已经提供了很多现有的库。

即使您拥有非公共图书馆,放置自己的libraries into a local/private repository也相对容易。

+0

其实它不是库,而是应用程序的一部分 - 只是应用程序包,类等等...... – Soid

+1

你可以把所有这些放到一个Jar中。 – OverZealous

+0

但它需要编译步骤,对不对? – Soid