Make groovy script grab a jar off the filesystem like grape

Grape, похоже, неплохо работает для добавления jar-файлов в ваш путь к классам. Это также делает много других вещей, таких как выборка и управление зависимостями. например

#!/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()

Есть ли способ заставить Grape захватить банку из файловой системы? Если не, Могу ли я каким-то образом воспроизвести то, что виноград делает в groovy / java?

Я бы хотел, чтобы это решение работало для скриптов, которые могут запускаться многими пользователями и множеством несовместимых jar-файлов, поэтому добавляйте jar-файлы в общий каталог, такой как ~ / .groovy / lib / не работает.

Я мог бы создать локальный репозиторий maven для локальных jar-библиотек, но это кажется излишним.

14
задан ataylor 25 September 2013 в 19:18
поделиться