3

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 回の実行ごとに 1 回)、実行を完了する前に 3 ~ 5 秒間一時停止します。私は Wireshark でスニッフィングしており (ここにキャプチャがあります)、HTTP リクエストを確認していますrepository.codehaus.org(Wireshark ストリームに 404 応答がいくつか表示されますが、スクリプトはなんとか実行されているため、ある時点で明らかに jar が検出されます)。

私の質問は、スクリプトが 1 回実行されると、@Grab 経由でダウンロードした jar ファイルは永久にキャッシュされないのでしょうか? 実際の Ivy/Maven リポジトリが頻繁にクエリされるのはなぜですか?

4

1 に答える 1

4

ファイルはにキャッシュする必要があります~/.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>
于 2012-11-19T22:21:26.463 に答える