Кэш Groovy Ivy (@Grab) не кешируется?

Я запускаю этот простой скрипт с помощью groovyConsole (версия 1.8.1):

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

Обычно он выполняется очень быстро (~ 0 секунд).

Однако иногда (раз в ~ 5 запусков) он приостанавливается на 3-5 секунд перед завершением запуска. Я нюхаю с помощью Wireshark (вот захват), и вижу HTTP-запросы к repository.codehaus.org (я вижу несколько ответов 404 в потоке Wireshark, но скрипту удается запустить, поэтому очевидно, что банки в какой-то момент обнаружены)

Мой вопрос: если скрипт запускается один раз, разве банки, загружаемые через @Grab, не кешируются навсегда? Почему репозиторий Ivy / Maven так часто запрашивается?


person ripper234    schedule 19.11.2012    source источник
comment
Это все, что вы @Grab в сценарии? Я только спрашиваю, поскольку Ivy (который лежит в основе @Grab), похоже, ищет множество несвязанных пакетов. Я не эксперт по Айви: - /   -  person tim_yates    schedule 19.11.2012
comment
@tim_yates - да, это весь скрипт.   -  person ripper234    schedule 19.11.2012


Ответы (1)


Файлы должны быть кэшированы в ~/.groovy/grapes. Если вы повторно запустите свой скрипт с -Divy.message.logger.level=4, вы получите некоторую отладочную информацию от ivy, которая может оказаться полезной.

Кроме того, если у вас есть виноград, который долго рассасывается, вы можете посоветовать плющу проверять его реже. Скопируйте конфигурацию ivy по умолчанию из здесь в ~/.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>
person ataylor    schedule 19.11.2012