Apache Ivy buildnumber痛苦地缓慢

时间:2013-07-12 14:29:10

标签: ant continuous-integration versioning ivy dependency-management

使用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文件,当它找不到它要查找的内容时,它会转到第二个解析器并再次尝试。当然它永远不会找到匹配,因为任何目录中都没有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}" />

我似乎无法找到其他人遇到这个问题,所以我确定某处我犯了错误。

1 个答案:

答案 0 :(得分:1)

我通常告诉buildnumber任务使用哪个解析器:

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

该文档描述了搜索所有可用解析器的默认行为。 (这是有道理的,您发布的回购可能不在默认的解析器设置中。)

注意:

  • 我使用 ivy.organisation ivy.module 变量,因为它们会自动从&#34; info&#34;我的常春藤文件的标签。