Виноград, похоже, работает достаточно хорошо для добавления банок в ваш путь к классам. Это также делает много других вещей, таких как выборка и управление зависимостями. например.
#!/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)}"
}
К сожалению, если в моей файловой системе есть банка, которую я хочу динамически добавляйте в файловую систему, тогда мне приходится прибегать к уродливое решение.
#!/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?
Я хотел бы, чтобы это решение работало для скриптов, которые могут выполняться многими пользователями и многими несовместимыми банками, поэтому добавление банок в общий каталог, например ~/.groovy/lib/, не будет работать.
Я мог бы создать локальный репозиторий maven для локальных, jar-библиотек, но что кажется излишним.