2011-06-13 10 views
5

Quando si esegue uno script che utilizza il sistema grape su @Grab una dipendenza nel repository ibiblio, fallisce finché non richiamo manualmente grape resolve dalla riga di comando. Dopodiché, si trova nella cache locale e lo script funziona correttamente.Groovy 1.8 @Grab fallisce a meno che non chiami manualmente la risoluzione dell'uva

C'è qualche altra annotazione che devo usare per farlo funzionare la prima volta dallo script? Sembra spassoso dire agli utenti di prima "risoluzione dell'uva" e poi funziona @Grab.

Questo è lo script, afferrando il vaso Jedi per Redis:

#!/usr/bin/env groovy 
@Grab('redis.clients:jedis:2.0.0') 

import redis.clients.jedis.* 

Jedis redis = new Jedis("localhost") 

che non riesce con questa eccezione se ho un pulito cache di ~/.groovy/uva:

org.codehaus.groovy.control.MultipleCompilationErrorsException: startup failed: 
General error during conversion: Error grabbing Grapes -- [unresolved dependency: redis.clients#jedis;2.0.0: ibiblio: unable to get resource for redis/clients#jedis;2.0.0: res=/redis/clients/jedis/2.0.0/jedis-2.0.0.pom: java.net.MalformedURLException: no protocol: /redis/clients/jedis/2.0.0/jedis-2.0.0.pom] 

solo viene eseguito una volta eseguo grape resolve manualmente dalla riga di comando:

grape -V resolve redis.clients jedis 2.0.0 

(parte di th e output mostra è il download dal ibiblio):

... 
ibiblio: found md file for redis.clients#jedis;2.0.0 
    => http://repo1.maven.org/maven2/redis/clients/jedis/2.0.0/jedis-2.0.0.pom (2.0.0) 
downloading http://repo1.maven.org/maven2/redis/clients/jedis/2.0.0/jedis-2.0.0.pom ... 
    ibiblio: downloading http://repo1.maven.org/maven2/redis/clients/jedis/2.0.0/jedis-2.0.0.pom 
    ibiblio: downloading http://repo1.maven.org/maven2/redis/clients/jedis/2.0.0/jedis-2.0.0.pom.sha1 
sha1 OK for http://repo1.maven.org/maven2/redis/clients/jedis/2.0.0/jedis-2.0.0.pom 
    [SUCCESSFUL ] redis.clients#jedis;2.0.0!jedis.pom(pom.original) (1184ms) 
... 

Dopo che è nella cache locale, lo script funziona bene con @Grab.

Non ho aggiunto manualmente un file ~/.groovy/grapeConfig.xml in modo che utilizzi quello predefinito fornito con groovy. Sto usando Groovy 1.8:

groovy -v 
Groovy Version: 1.8.0 JVM: 1.6.0_24 

Ho provato ad aggiungere manualmente al di sopra del grab:

@GrabResolver(name='ibiblio', m2Compatible='true', root='http://repo1.maven.org/maven2/') 

ma che non ha aiutato. Mi sto perdendo qualcosa?

+0

Ho avuto un rapporto da Paul King sulla mailing list groovy che lo script ha funzionato bene per lui fuori dagli schemi, portandolo a credere che sia ambientale. Ho avuto il fallimento per me su 2 macchine diverse, e sono curioso di sapere se qualcun altro ha avuto situazioni simili (o se lo script di cui sopra funziona/fallisce fuori dagli schemi per gli altri). –

+0

Non si vede questo problema nella versione più recente di Groovy 2.x '$ groovy -v Versione Groovy: 2.4.7 JVM: 1.8.0_20 Fornitore: Oracle Corporation OS: Mac OS X' – MarkHu

risposta

3

Puoi provare a mettere questo file come ~ .groovy \ grapeConfig.xml, si può avere qualche problema di configurazione dell'ambiente:

<ivysettings> 
    <settings defaultResolver="downloadGrapes"/> 
    <resolvers> 
    <chain name="downloadGrapes"> 
     <filesystem name="cachedGrapes"> 
     <ivy pattern="${user.home}/.groovy/grapes/[organisation]/[module]/ivy-[revision].xml"/> 
     <artifact pattern="${user.home}/.groovy/grapes/[organisation]/[module]/[type]s/[artifact]-[revision].[ext]"/> 
     </filesystem> 
     <ibiblio name="ibiblio" m2compatible="true"/> 
    </chain> 
    </resolvers> 
</ivysettings> 
0

trovare l'uva che sta tirando in problema scaricare ed esclusione @GrabExclude ("logkit: logkit"),

poi trovare il problema scaricare e metterlo nel tuo archivio utilizzando mvn install: installare file

Aggiungi un Uva il file che hai installato localmente