2

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}" />

この問題に遭遇した人は他にいないようですので、どこかで間違いを犯していると確信しています。

4

1 に答える 1

1

私は通常、buildnumberタスクにどのリゾルバーを使用するかを伝えます。

<ivy:buildnumber resolver="url-chain"
                 organisation="${ivy.organisation}" 
                 module="${ivy.module}" 
                 revision="${version.base}"/>

ドキュメントでは、デフォルトの動作で利用可能なすべてのリゾルバーを検索する方法について説明しています。(これは理にかなっていますが、公開するレポはデフォルトのリゾルバー設定にない場合があります)。

ノート:

  • ivy.organisation変数とivy.module変数を使用します。これらの変数は、ivy ファイルの「info」タグから自動的に設定されるためです。
于 2013-07-13T07:48:35.980 に答える