Groovy的常春藤缓存(@Grab)没有缓存?

时间:2012-11-19 10:40:51

标签: groovy grape

我使用groovyConsole(版本1.8.1)运行这个简单的groovy脚本:

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)嗅探,并查看对repository.codehaus.org的HTTP请求(我在Wireshark流中看到了一些404响应,但脚本设法运行,所以显然在某些地方找到了jar点)

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

1 个答案:

答案 0 :(得分:3)

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

此外,如果你的葡萄需要很长时间才能解决,你可以告诉常春藤不要经常检查。将默认常春藤配置从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>