получая сообщение об ошибке: «неизвестный преобразователь XYZ» - PullRequest
15 голосов
/ 28 февраля 2011

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

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

Ответы [ 2 ]

16 голосов
/ 28 февраля 2011

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

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

<target name="clean-all" depends="clean" description="Purge ivy cache">
    <ivy:cleancache/>
</target>
3 голосов
/ 15 марта 2011

Запустите сборку муравья с подробным флагом (-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

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

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

~ gMale

...