Получение сообщения об ошибке: "Неизвестный резольвер XYZ"

при разрешении моего ivy.xml, я получаю длинный список ошибок, указав "неизвестный резольвер XYZ". Я знаю резольвера, он используется в том же проекте, но в другой задаче. Насколько я понимаю, распознаватель, используемый для создания записи в кэш, хранится и не может определяться последующим распознавателем.

Вопрос: как я могу избежать этого? Seeams, как это, на самом деле не ошибка, скорее как предупреждение, так как я могу разрешить все зависимости и продолжить компиляцию.

Ответы

Ответ 1

В рамках одного и того же проекта преобразователь сборки не изменится, поскольку он определен в файле ivysettings.xml.

Скорее всего, это проблема с устаревшим кешем плюща. Я бы предложил добавить дополнительную цель, которая очистит ваш кеш. Полезно при столкновении с этим типом проблемы:

<target name="clean-all" depends="clean" description="Purge ivy cache">
    <ivy:cleancache/>
</target>

Ответ 2

Запустите свою конструкцию ant с флагом verbose (-v). Это даст вам четкое представление о том, какие файлы настроек используются во время процесса разрешения. Моя ставка заключается в том, что вы найдете свою проблему довольно легко, и она будет в соответствии с файлами настроек, которые, по вашему мнению, вы использовали, на самом деле не используются.

В моих проектах, я нахожу, что этот тип вещей часто случается, когда задача после решения (например, извлечения) запускает решение "автоматически" и использует настройки плюса по умолчанию, а не тот, который я хочу использовать в данный момент, Скорее всего, ваш файл настроек по умолчанию не содержит распознавателей, которые вы ожидаете.

Чтобы решить эти проблемы, я делаю ivysettings-common.xml, содержащий только разрешители. Затем в каждом из моих файлов настроек я импортирую общие настройки и ссылаюсь на решатели в основной цепочке. Это выглядит так:

<ivysettings>
    <settings defaultResolver="all-repositories" />
    <include file="ivysettings-common.xml" />
    <resolvers>
        <chain name="all-repositories" returnFirst="true" >
               <resolver ref="project" />
               <resolver ref="local" />
               <resolver ref="hibernate" />
               <resolver ref="ibibilo" />
        </chain>        
    </resolvers>
</ivysettings>

Оттуда я делаю обычный файл моими настройками по умолчанию, просто "в случае чрезвычайной ситуации". Я знаю, что все мои решатели могут быть найдены (добавив следующее к ivy.properties):

ivy.settings.file  = ${basedir}/path/to/ivysettings-common.xml

но я явно указываю все мои плющ-вызовы на соответствующий файл настроек, стараясь никогда не полагаться на значение по умолчанию, потому что вся причина, по которой я использую плющ + ant, заключается в том, что я предпочитаю точный контроль над процессом сборки:

Я надеюсь, что это поможет вам или кому-то еще.

~ gMale