2012-11-19 38 views
2

我正在使用groovyConsole中这只是常规的脚本(1.8.1版本):Groovy的常春藤缓存(@Grab)没有缓存?

println "Start " + new Date() 
@Grab('log4j:log4j:1.2.16') 
import org.apache.log4j.Logger 
println "End " + new Date() 

通常情况下,其执行速度非常快(〜0秒)。

但是,有时(每5次运行一次),它会在完成运行之前暂停3-5秒。 我使用Wireshark(here is the capture)嗅,看看HTTP请求repository.codehaus.org(我看到Wireshark的流中的一些404的响应,但是脚本管理运行,所以明显的罐子在某些时候找到)

我问题是 - 一旦脚本运行一次,它不是通过@Grab永久缓存下载的罐子吗?为什么常常查询实际的Ivy/Maven存储库?

+0

这就是你在剧本中的所有'@ Grab'吗?我只问,因为常春藤(支持'@ Grab')似乎正在寻找大量无关的软件包。我不是常春藤专家: -/ –

+0

@tim_yates - 是的,这是整个脚本。 – ripper234

回答

3

这些文件应缓存在~/.groovy/grapes。如果您使用-Divy.message.logger.level=4重新运行脚本,则会从常青藤获得一些调试信息,这可能会有所帮助。

此外,如果你有一种葡萄需要很长时间来解决,你可以告诉常春藤不太经常检查。将默认的ivy配置从here复制到~/.groovy/grapeConfig.xml,并将属性ivy.cache.ttl.default复制到一段时间,然后再次检查。例如:

<ivysettings> 
    <property name="ivy.cache.ttl.default" value="24h"/> 
    <settings defaultResolver="downloadGrapes"/> 
    <resolvers> 
    <chain name="downloadGrapes" returnFirst="true"> 
     <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](-[classifier]).[ext]"/> 
     </filesystem> 
     <ibiblio name="localm2" root="file:${user.home}/.m2/repository/" checkmodified="true" changingPattern=".*" changingMatcher="regexp" m2compatible="true"/> 
     <!-- todo add 'endorsed groovy extensions' resolver here --> 
     <ibiblio name="codehaus" root="http://repository.codehaus.org/" m2compatible="true"/> 
     <ibiblio name="ibiblio" m2compatible="true"/> 
     <ibiblio name="java.net2" root="http://download.java.net/maven/2/" m2compatible="true"/> 
    </chain> 
    </resolvers> 
</ivysettings>