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