Ответ 1
Был некоторый интерес к добавлению этой функции в виноград, но ничего серьезного. Я предполагаю, что вряд ли это будет добавлено в ближайшем будущем. (6-18 месяцев)
Виноград, похоже, работает достаточно хорошо для добавления банок в ваш путь к классам. Это также делает много других вещей, таких как выборка и управление зависимостями. например.
#!/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-библиотек, но что кажется излишним.
Был некоторый интерес к добавлению этой функции в виноград, но ничего серьезного. Я предполагаю, что вряд ли это будет добавлено в ближайшем будущем. (6-18 месяцев)
Вот как я это решил.
Когда Grape (Ivy) хочет что-то, он кэширует его в директории ~/.groovy/grapes
. Все, что вам нужно сделать, это просто создать свой собственный файл ivy.xml и бросить туда банку. Я понял это, просто посмотрев на некоторые другие артефакты, доставленные из maven. Вот небольшой пример.....
Мы используем Oracle здесь, и я хотел, чтобы jdbc jar файл мог быть "схвачен" моими сценариями Groovy. К сожалению, я не смог найти репозиторий, в котором была эта банка в Интернете.
~/.groovy/grapes/com.oracle
~/.groovy/grapes/com.oracle/ojdbc6
~/.groovy/grapes/com.oracle/ojdbc6/jars
Вот мой xml.
<?xml version="1.0" encoding="UTF-8"?>
<ivy-module version="2.0" xmlns:m="http://ant.apache.org/ivy/maven"
>
<info organisation="com.oracle" module="ojdbc6" revision="11.2.0.1.0" status="release" publication="20130102153401">
<license name="" />
<description homepage="">Oracle ojdbc driver</description>
</info>
<configurations>
<conf name="default" visibility="public" description="" extends="runtime,master" />
<conf name="master" visibility="public" description="" />
<conf name="compile" visibility="public" description="" />
<conf name="provided" visibility="public" description="" />
<conf name="runtime" visibility="public" description="" extends="compile" />
<conf name="test" visibility="public" description="" extends="runtime" />
<conf name="system" visibility="public" description="" />
<conf name="sources" visibility="public" description="" />
<conf name="javadoc" visibility="public" description="" />
<conf name="optional" visibility="public" description="" />
</configurations>
<publications>
<artifact name="ojdbc6" type="jar" ext="jar" conf="master" />
</publications>
</ivy-module>
Теперь я могу использовать эту банку в сценариях Groovy со следующим....
@Grapes([
@GrabConfig(systemClassLoader=true),
@Grab('com.oracle:ojdbc6:11.2.0.1.0'),
])
import groovy.sql.*
Чтобы упростить развертывание этого винограда на нескольких серверах, я создал zip файл, который я мог извлечь где угодно....
$ unzip -qql oracle_jdbc_groovy_grape.zip
0 06-11-2012 13:50 .groovy/grapes/com.oracle/
0 06-12-2012 14:17 .groovy/grapes/com.oracle/ojdbc6/
0 06-12-2012 14:17 .groovy/grapes/com.oracle/ojdbc6/jars/
2111220 06-11-2012 11:46 .groovy/grapes/com.oracle/ojdbc6/jars/ojdbc6-11.2.0.1.0.jar
2349 06-11-2012 11:50 .groovy/grapes/com.oracle/ojdbc6/ivy-11.2.0.1.0.xml
Вы можете настроить параметры плюща, которые использует Grape, создав файл ~/.groovy/grapeConfig.xml
.
Вот пример использования локальной файловой системы в качестве репозитория:
<ibiblio name="local" root="file:${user.home}/.m2/repository/" m2compatible="true"/>