2014-10-20 11 views
8

Uczę się świetnie w pakiecie skryptowym o nazwie geoscript-groovy. Śledziłem Groovy samouczek REST here i przetestowane następujący kod:Groovy: niezdolny do rozwiązania klasy groovyx.net.http.RESTClient

import groovyx.net.http.RESTClient 

def client = new RESTClient('http://www.acme.com/') 
def resp = client.get(path : 'products/3322') // ACME boomerang 

Jednak mam błąd w rachunku import mówiąc:

Groovy:unable to resolve class groovyx.net.http.RESTClient 

Szukałem wokół i istnieje wiele pytań i odpowiedzi dla tego komunikatu o błędzie, np. import groovyx.net.http.RESTClient in Groovy class i RestClient Grails Import fails. Jednak wszystkie one dotyczą graalów, których nie używam i których nie znam.

Moje pytanie brzmi

Jak mam rozwiązać ten błąd, jeśli mam tylko Groovy? (Moja wersja groovy jest instalowana pod Ubuntu 12.04 z następującymi poleceniami).

sudo apt-add-repository ppa:groovy-dev/groovy 
sudo apt-get update 
sudo apt-get install groovy 

Dzięki.

- EDIT ---

dodałem @Grab oświadczenia zgodnie z sugestią i postawić rest1.groovy plik dwuwierszowy następująco:

@Grab(group='org.codehaus.groovy.modules.http-builder', module='http-builder', version='0.7') 
import groovyx.net.http.RESTClient 

groovyConsole rest1.groovy wydaje się działać OK. Ale groovysh < rest1.groovy nadal daje mi błąd (jak pokazano poniżej). Chyba muszę mieć ten program w środowisku podobnym do groovysh, ponieważ groovy skrypt jest wywoływany w tle jako usługa sieciowa. Bez linii @Grab usługa generuje wyjątek. Z linią @Grab usługa nawet się nie zarejestruje. Czy istnieje bardziej trwały sposób uwzględnienia niezbędnych zależności dla groovyx.net.http.RESTClient niż jeden chwyt skryptowy (np. apt-get lub ręczne kopiowanie czegoś)?

groovysh < rest1.groovy 
Groovy Shell (1.8.6, JVM: 1.7.0_72) 
Type 'help' or '\h' for help. 
------------------------------------------------------------------------------- 
groovy:000> @Grab(group='org.codehaus.groovy.modules.http-builder', module='http-builder', version='0.7') 
groovy:001> import groovyx.net.http.RESTClient 
ERROR org.codehaus.groovy.tools.shell.CommandException: 
Invalid import definition: 'import groovyx.net.http.RESTClient'; reason: startup failed: 
script1413902882282760571375.groovy: 1: unable to resolve class groovyx.net.http.RESTClient 
@ line 1, column 1. 
    import groovyx.net.http.RESTClient 
+0

Czy dodajesz do swojej ścieżki klasowej program budujący http? Sprawdź ten przykład. http://groovy.codehaus.org/modules/http-builder/doc/rest.html – Raphael

Odpowiedz

12

Prawdopodobnie potrzebujesz tylko linii Grape, aby prawidłowo upewnić się, że skrypt Groovy ma potrzebny jar w ścieżce klas. Umieścić to na górze skryptu:

@Grab(group='org.codehaus.groovy.modules.http-builder', module='http-builder', version='0.7') 

Uwaga, nie mogę zobaczyć resztę swojego scenariusza, więc mogą pojawić się inne moduły trzeba chwycić za. Sprawdź tutaj więcej możliwości: http://groovy.codehaus.org/modules/http-builder/doc/rest.html

EDIT

Cóż, cieszę działa część drogi teraz. Jeśli chodzi o groovysh, nie wiem, w jaki sposób uzyskać groovysh dynamicznie pobierać biblioteki zależne, więc to, co naprawdę musisz zrobić, to, w ramach instalacji skryptu, umieścić również słoik, którego potrzebujesz w katalogu (wywołanie to „lib” lub coś w tym rodzaju), a następnie dodać argument do rozmowy groovysh: groovysh cp ./lib < script.groovy z tego: http://groovy.codehaus.org/Groovy+Shell

słoika chcesz powinny być dostępne za pomocą Maven specyfikacja artefaktów z linii @Grab.

+1

Dzięki za sugestię. To działało dla 'groovyConsole', ale nie dla' groovysh'. Zobacz moją EDYCJĘ. – tinlyx

Powiązane problemy