在IVY中使用状态,适用于“较不稳定的”(即集成),而不适用于其他(即里程碑和发布)

时间:2011-12-01 05:16:03

标签: ant ivy

我正拼命地努力让这个工作。我花了一整天的时间来找不到什么。

似乎IVY只能解析状态列表中的“不太稳定的状态”,即对于默认状态,只有整合而不是里程碑或释放。

这是一个测试蚂蚁文件。

<project name="helicopter" basedir="." xmlns:ivy="antlib:org.apache.ivy.ant">
    <ivy:settings file="ivysettings.xml" id="ivy.instance"/>
    <!-- the call to resolve is not mandatory, retrieve makes an implicit call if we don't -->
    <ivy:resolve file="ivy.xml" />
    <ivy:retrieve type="swc" pattern="../libs/bin/[module]-[revision].[ext]" />
    <ivy:retrieve type="src" pattern="../libs/src/[module]-[revision].[ext]" />
</project>

这是ivysettings.xml

<?xml version="1.0" encoding="UTF-8"?>
<ivysettings>
    <settings defaultResolver="local" />

    <resolvers>
        <filesystem
            name="local"
            checkmodified="true">
            <artifact pattern="C:/repository/[organisation]/[module]/[revision]/[artifact].[ext]" />
        </filesystem>
   </resolvers>
</ivysettings>

这是ivy.xml

<ivy-module
    version="2.0"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:noNamespaceSchemaLocation="http://ant.apache.org/ivy/schemas/ivy.xsd"
>

    <info
        organisation="com.org"
        module="moduleA"
        status="integration"
    />

    <publications>
        <artifact type="swf" ext="swf" />
        <artifact type="src" ext="src.zip" />
    </publications>

    <dependencies>
        <dependency org="com.org" name="moduleB" rev="latest.integration">
            <artifact name="moduleB" type="swc" ext="swc" />
            <artifact name="moduleB" type="src" ext="src.zip" />
        </dependency>
    </dependencies>
</ivy-module>

存储库(文件夹)中的moduleB ivy.xml

<info organisation="com.org" module="moduleB" revision="0.0.5.0" status="integration" publication="20111201174403"/>

<publications>
    <artifact type="swc" ext="swc"/>
    <artifact type="src" ext="src.zip"/>
</publications>

<dependencies>
</dependencies>

所以这将有效,moduleB将被正确下载。
现在如果我编辑ivy.xml以获取latest.milestone     

    <info
        organisation="com.org"
        module="moduleA"
        status="integration"
    />

    <publications>
        <artifact type="swf" ext="swf" />
        <artifact type="src" ext="src.zip" />
    </publications>

    <dependencies>
        <dependency org="com.org" name="moduleB" rev="latest.milestone">
            <artifact name="moduleB" type="swc" ext="swc" />
            <artifact name="moduleB" type="src" ext="src.zip" />
        </dependency>
    </dependencies>
</ivy-module>

并编辑我发布的moduleB的ivy.xml(以便在存储库文件夹中进行编辑)为状态里程碑

<info organisation="com.org" module="moduleB" revision="0.0.5.0" status="milestone" publication="20111201174403"/>

<publications>
    <artifact type="swc" ext="swc"/>
    <artifact type="src" ext="src.zip"/>
</publications>

<dependencies>
</dependencies>

它不起作用,虽然列出

,但不会找到该工件
:: problems summary ::
:::: WARNINGS
        module not found: com.org#moduleB;latest.milestone

    ==== local: tried

      -- artifact com.org#moduleB;latest.milestone!moduleB.src.zip(src):

      C:/repository/com.org/moduleB/revision]/moduleB.src.zip

      [0.0.5.0 (MD)]

      -- artifact com.org#moduleB;latest.milestone!moduleB.swc:

      C:/repository/com.org/moduleB/[revision]/moduleB.swc

      [0.0.5.0 (MD)]

现在有趣的部分! 在使用IVY的默认状态之前,我使用了我的。 它具有完全相同的行为(这就是我尝试默认值的原因)。 有趣的是,如果我有

<statuses default="status-dev">
    <status name="status-stable" integration="false"/>
    <status name="status-test" integration="false"/>
    <status name="status-dev" integration="true" />
</statuses>

唯一最新的[status]工作将是status-dev。 现在,如果我将状态顺序更改为

<statuses default="status-dev">
    <status name="status-stable" integration="false"/>
    <status name="status-dev" integration="true" />
    <status name="status-test" integration="false"/>
</statuses>

唯一正在进行状态测试的人。

我在这里感到困惑......:/

感谢您提供的任何帮助。 干杯, 泽维尔

我创建了一个显示奇怪行为的基本项目 moduleB是正在发布的模块 moduleA是将moduleB作为依赖项的模块 请在ivysettings文件中更新本地存储库的路径 下载文件的链接
https://rapidshare.com/files/1326835940/test_ivy.zip

1 个答案:

答案 0 :(得分:3)

哇,这看起来像是一个非常奇怪的依赖构造重载。我会坚持使用更简单的ivy.xml,对moduleB只有一个依赖。只需在运行时使用属性文件更改rev属性。也就是说,将所有依赖项合并到:

   <dependency org="com.org" name="moduleB" rev="${dependency.rev.moduleB}" 
     conf="build-release->default;build-milestone->default;build-devs->default">
            <artifact name="shared" type="swc" ext="swc" />
            <artifact name="shared" type="src" ext="src.zip" />
   </dependency>

您甚至可以在ivy-settings.xml中为属性(例如IvyDE)提供默认值:

<property name="dependency.rev.moduleB" 
          value="latest.integration"
          override="false"/>

此外,您还需要编辑ivysettings.xml以包含存储库的模式以查找ivy.xml文件:

 <resolvers>
        <filesystem
            name="local"
            checkmodified="true">
            <artifact pattern="C:/repository/[organisation]/[module]/[revision]/[artifact].[ext]" />
            <ivy pattern="C:/repository/[organisation]/[module]/[revision]/ivy.xml" />
        </filesystem>
   </resolvers>