Использование статуса в IVY работает для «менее стабильного» (т. Е. Интеграции), а не для другого (т. Е. Этап и выпуск). - PullRequest
1 голос
/ 01 декабря 2011

Я отчаянно пытаюсь заставить это работать. Я потратил на это целый день и не могу найти в чем дело.

Кажется, что 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>

И модуль B 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>

Так что это будет работать, модуль B будет загружен в порядке.
Теперь, если я отредактирую файл ivy.xml, чтобы получить последний.

    <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>

и отредактируйте файл ivy.xml моего опубликованного модуля B (поэтому редактирование в папке хранилища), чтобы он имел статусную веху

<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>

Работает только одна проверка состояния.

Я озадачен здесь ...: /

Спасибо за любую помощь, которую вы могли бы оказать. Ура, Xavier

Я создал базовый проект, показывающий странное поведение.
moduleB опубликован модуль.
moduleA - это модуль, получающий moduleB в качестве зависимости.
Обновите путь к локальному репозиторию в ivysettings файле
Ссылка для скачивания файла
https://rapidshare.com/files/1326835940/test_ivy.zip

1 Ответ

3 голосов
/ 01 декабря 2011

Ух ты, это похоже на очень странную перегрузку конструкции зависимости. Я бы придерживался более простого 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>

Вы даже можете указать значение по умолчанию для свойства (например, для IvyDE) в вашем файле ivy-settings.xml:

<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>
...