Grape 似乎可以很好地将 jars 添加到您的类路径中。它还做了很多其他的事情,比如获取和依赖管理。例如
#!/home/robert/bin/groovy
import org.apache.commons.lang.StringUtils
@Grab(group='commons-lang', module='commons-lang', version='2.4')
def strings = ['Hello', 'Groovy', 'AVeryLongWord!', 'A simple sentence']
strings.each { String aString ->
println "$aString: ${StringUtils.abbreviate(aString,10)}"
}
不幸的是,如果我的文件系统上有一个我想动态添加到文件系统的 jar,那么我必须求助于一个更丑陋的解决方案。
#!/home/robert/bin/groovy
def loader = this.class.classLoader.rootLoader
loader.addURL(new File("/home/robert/somejars/arithmetic-1.1.jar").toURI().toURL())
// can't use traditional package import
arithmeticMainClass = Class.forName("org.scharp.arithmetic.Main")
println "42 - 23 = " + arithmeticMainClass.subtract(42, 23)
// can't use "new" operator
myArithmeticObject = arithmeticMainClass.newInstance()
有没有办法让葡萄从文件系统中抓取一个罐子?如果没有,我可以以某种方式复制葡萄在 groovy/java 中所做的事情吗?
我希望这个解决方案适用于可以由许多用户和许多不兼容的 jar 运行的脚本,因此将 jar 添加到 ~/.groovy/lib/ 等公共目录将不起作用。
我可以为本地 jar 库创建一个本地 maven 存储库,但这似乎有点矫枉过正。