buildnumberを使用して ant ビルド スクリプト内で新しいバージョン番号を計算すると、ivy は次のバージョンの計算中に最大 20 分間ハングします。ビルドの数が増えるにつれて、指数関数的に増加しているように見えます (私がテストしているプロジェクトには約 600 あります)。最初は、大きなファイルとハッシュ チェックが原因ではないかと考えましたが、デバッグをオンにして、これを約 1,200 回確認しました。
[ivy:buildnumber] using ssh to list all in /Storage/ivy/status/base//module/version
[ivy:buildnumber] SShRepository:list called: /Storage/ivy/status/base//module/version
[ivy:buildnumber] found 12 urls
[ivy:buildnumber] 0 matched /Storage/ivy/status/base//module/version/[artifact]-version.jar
なんらかの理由で、jar ファイルを見つけるためにすべてのディレクトリを再帰的に調べており、探しているものが見つからない場合は、2 番目のリゾルバーに移動して再試行します。もちろん、どのディレクトリにもjarがないため、一致するものは見つかりません。
ivysettings ファイルは次のようになります。
<ivysettings>
<property name="ivy.checksums" value="" />
<property name="tisivy.host" value="builds.example.com" />
<property name="tisivy.url.path" value="http://${tisivy.host}" />
<property name="tisivy.file.path" value="/Storage/ivy" />
<property name="tisivy.repo.pattern" value="[module]/[revision]" />
<property name="tisivy.artifact.pattern" value="${tisivy.repo.pattern}/[artifact]-[revision].[ext]" />
<settings defaultResolver="url-chain" />
<caches/>
<resolvers>
<chain name="url-chain" returnFirst="true">
<url name="http">
<ivy pattern="${tisivy.url.path}/status/${tisivy.repo.pattern}/ivy.xml" />
<artifact pattern="${tisivy.url.path}/status/${tisivy.artifact.pattern}" />
</url>
</chain>
<ssh name="ssh" user="example" userPassword="****************" host="${tisivy.host}" publishPermissions="0644">
<ivy pattern="${tisivy.file.path}/status/${tisivy.repo.pattern}/ivy.xml" />
<artifact pattern="${tisivy.file.path}/status/${tisivy.artifact.pattern}" />
</ssh>
</resolvers>
<triggers>
</triggers>
<statuses>
<status name="production" integration="false" />
<status name="integration" integration="true" />
<status name="status" integration="false" />
</statuses>
<modules>
</modules>
</ivysettings>
ビルド番号の呼び出しは次のようになります。
<ivy:buildnumber organisation="org" module="${ivy.module.doubleslash}" revision="${version.base}" />
この問題に遭遇した人は他にいないようですので、どこかで間違いを犯していると確信しています。