Получение Groovy Grape Going!
Я попытался использовать новую Groovy функцию Grape в Groovy 1.6-beta-2, но я получаю сообщение об ошибке;
unable to resolve class com.jidesoft.swing.JideSplitButton
из консоли Groovy (/opt/groovy/groovy-1.6-beta-2/bin/groovyConsole) при запуске примера запаса;
import com.jidesoft.swing.JideSplitButton
@Grab(group='com.jidesoft', module='jide-oss', version='[2.2.1,)')
public class TestClassAnnotation {
public static String testMethod () {
return JideSplitButton.class.name
}
}
Я даже попробовал запустить инструмент командной строки grape, чтобы гарантировать, что библиотека импортирована. Вот так:
$ /opt/groovy/groovy-1.6-beta-2/bin/grape install com.jidesoft jide-oss
который действительно устанавливает библиотеку. Как получить код для правильной работы/компиляции с groovyConsole?
Ответы
Ответ 1
Есть еще некоторые перегибы при разработке процедуры запуска/уничтожения. Для Beta-2 сначала сделайте это в своем собственном script:
groovy.grape.Grape.initGrape()
Другая проблема, с которой вы столкнетесь, связана с радостями использования неограниченного верхнего диапазона. Jide-oss от 2.3.0 onward компилирует свой код на байт-коды Java 6, поэтому вам нужно либо запустить консоль на Java 6 (что бы вы хотели сделать для Swing в любом случае), либо установить верхний предел для диапазоны, например
import com.jidesoft.swing.JideSplitButton
@Grab(group='com.jidesoft', module='jide-oss', version='[2.2.1,2.3.0)')
public class TestClassAnnotation {
public static String testMethod () {
return JideSplitButton.class.name
}
}
new TestClassAnnotation().testMethod()
Ответ 2
Наконец-то я получил его для Groovy Shell (1.6.5, JVM: 1.6.0_13). Это должно быть документировано лучше.
Сначала в командной строке...
grape install org.codehaus.groovy.modules.http-builder http-builder 0.5.0-RC2
Затем в groovysh...
groovy:000> import groovy.grape.Grape
groovy:000> Grape.grab(group:'org.codehaus.groovy.modules.http-builder', module:'http-builder', version:'0.5.0-RC2')
groovy:000> def http= new groovyx.net.http.HTTPBuilder('http://rovio')
===> [email protected]
@grab лучше всего используется в файле, чем оболочка.
Ответ 3
Ok. Похоже, это короткая рабочая демонстрация (бег с groovyConsole)
groovy.grape.Grape.initGrape()
@Grab(group='com.jidesoft', module='jide-oss', version='[2.2.1,2.3.0)')
public class UsedToExposeAnnotationToComplier {}
com.jidesoft.swing.JideSplitButton.class.name
При запуске он производит
Результат: "com.jidesoft.swing.JideSplitButton"
Очень круто!!
Ответ 4
Оператор импорта должен выглядеть после.
Ps. По крайней мере оператор import должен существовать после захвата
@Grab(group='com.jidesoft', module='jide-oss', version='[2.2.1,)')
import com.jidesoft.swing.JideSplitButton
public class TestClassAnnotation {
public static String testMethod () {
return JideSplitButton.class.name
}
}
Ответ 5
В другом примере используется последний RC-2 (примечание: Grab аннотирует createEmptyInts):
// create and use a primitive array
import org.apache.commons.collections.primitives.ArrayIntList
@Grab(group='commons-primitives', module='commons-primitives', version='1.0')
def createEmptyInts() { new ArrayIntList() }
def ints = createEmptyInts()
ints.add(0, 42)
assert ints.size() == 1
assert ints.get(0) == 42
Ответ 6
Другой пример (примечание: Grab аннотирует getHtml):
// find the PDF links in the Java 1.5.0 documentation
@Grab(group='org.ccil.cowan.tagsoup', module='tagsoup', version='0.9.7')
def getHtml() {
def parser = new XmlParser(new org.ccil.cowan.tagsoup.Parser())
parser.parse("http://java.sun.com/j2se/1.5.0/download-pdf.html")
}
html.body.'**'[email protected](~/.*\.pdf/).each{ println it }
Ответ 7
Другой пример (примечание: Grab
annotates getFruit
):
// Google Collections example
import com.google.common.collect.HashBiMap
@Grab(group='com.google.code.google-collections', module='google-collect', version='snapshot-20080530')
def getFruit() { [grape:'purple', lemon:'yellow', orange:'orange'] as HashBiMap }
assert fruit.inverse().yellow == 'lemon'