Запускаем Groovy's Grape!

Я пытался использовать новую возможность 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
    }
}

Я даже пытался запустить инструмент командной строки винограда, чтобы убедиться, что библиотека импортирована. Нравится;

 $ /opt/groovy/groovy-1.6-beta-2/bin/grape install com.jidesoft jide-oss

который отлично устанавливает библиотеку. Как мне заставить код правильно запускаться/компилироваться из groovyConsole?


person Bob Herrmann    schedule 10.10.2008    source источник


Ответы (7)


Есть еще некоторые перегибы в отработке процедуры запуска/выключения. Для Beta-2 сначала сделайте это в собственном скрипте:

groovy.grape.Grape.initGrape()

Другая проблема, с которой вы столкнетесь, связана с радостями использования неограниченного верхнего диапазона. Jide-oss, начиная с версии 2.3.0, компилирует свой код в байт-коды 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()
person shemnon    schedule 11.10.2008

Наконец-то я заработал для Groovy Shell (1.6.5, JVM: 1.6.0_13). Это должно быть документировано лучше.

Сначала в командной строке...

виноградная установка org.codehaus.groovy.modules.http-builder http-builder 0.5.0-RC2

Потом в грувыш...

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')
===> groovyx.net.http.HTTPBuilder@91520

@grab лучше использовать в файле, чем в оболочке.

person Jim Morris    schedule 27.10.2009

В порядке. Похоже, это короткая рабочая демонстрация (запускается из 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"

Очень круто!!

person Bob Herrmann    schedule 11.10.2008
comment
Это отлично сработало для меня. Пустой класс является ключевым. Пара моментов... 1/ Мне не нужна строка initGrape() (используя groovy 1.7x или 1.8x).. 2/ Если вы находитесь за прокси-сервером, обязательно добавьте настройки прокси-сервера -Dhttp.proxyHost=‹ proxyhost› -Dhttp.proxyPort=‹proxyPort›... Я добавляю их в свой startGroovy.sh|bat - person khylo; 05.03.2012

Оператор импорта должен появиться после захватов.
Пс. По крайней мере, один оператор импорта должен существовать после захватов.

@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
    }
}
person Daniel Ribeiro    schedule 09.12.2013

Другой пример с использованием последней версии 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
person Community    schedule 23.01.2009
comment
Примеры украдены с сайта groovy.codehaus.org/Grape. (точно скопировано) Кроме того, это не отвечает на вопрос. - person Pablo Fernandez; 24.04.2009
comment
Я согласен. Пожалуйста, отсылайте людей к правильным ответам, если вы найдете их где-то в Интернете. Дайте ссылку. Пожалуйста, не приписывайте работы других людей без указания авторства. - person Anarchofascist; 16.07.2013

Другой пример (примечание: 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 }
person Community    schedule 31.01.2009
comment
Примеры украдены с сайта groovy.codehaus.org/Grape. (точно скопировано) Кроме того, это не отвечает на вопрос. - person Pablo Fernandez; 24.04.2009

Другой пример (примечание: Grab аннотирует 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'
person Community    schedule 31.01.2009
comment
Примеры украдены с сайта groovy.codehaus.org/Grape. (точно скопировано) Кроме того, это не отвечает на вопрос. - person Pablo Fernandez; 24.04.2009