Ошибка публикации: несовместимые ограничения версии для анализатора

У меня очень странная проблема. У меня есть некоторые зависимости, которые до добавления новой зависимости работают хорошо, но как только я добавляю новую (в данном конкретном случае async_await), я получаю ошибку Incompatible version constraints on analyzer при использовании pub get. Любопытно, что async_await НЕ является несовместимым ограничением!

Pub get failed, [1] Разрешение зависимостей... Несовместимая версия
ограничения анализатора:
- angular 1.0.0 зависит от версии >=0.15.0 ‹0.19.0
- di 3.3.1 зависит для версии >=0.15.0 ‹0.22.0
- redstone_mapper 0.1.1 зависит от версии >=0.13.0 ‹0.14.0

Почему эта ошибка не появляется, когда я удаляю async_await (то же самое произошло с другим импортом), если ограничения все равно не работают?

Обновить

Выполнение pub upgrade выявило еще одну проблему

Разрешение зависимостей...
Несовместимые ограничения версии анализатора:
- angular 1.0.0 зависит от версии >=0.15.0 ‹0.19.0
- async_await 0.0.0 зависит от версии >=0.22.4 ‹0.23.0

Pubspec.yaml

name: aristadart
description: A sample web application
dependencies:
  angular: 1.0.0
  browser: any
  di: any
  fp: any
  http: any
  mongo_dart: any
  redstone: any
  redstone_mapper: any
  redstone_mapper_mongo: any
  shelf_static: any


transformers:
- redstone_mapper
- angular:
    html_files:
    - lib/components/login/login.html
    - lib/components/login/nuevo_usuario.html
    - lib/components/home/home.html
    - lib/components/evento/evento.html
    - lib/components/vista/vista.html

person Cristian Garcia    schedule 29.01.2015    source источник
comment
Не могли бы вы опубликовать свой pubspec.yaml   -  person Günter Zöchbauer    schedule 29.01.2015
comment
@GünterZöchbauer см. редактирование.   -  person Cristian Garcia    schedule 29.01.2015
comment
Я попробовал это с dependency_overrides из моего ответа, и это сработало. Вы все еще получаете сообщение об ошибке?   -  person Günter Zöchbauer    schedule 29.01.2015


Ответы (2)


Просто не существует набора зависимостей, в котором уместились бы все ограничения версий.
Я решаю такие проблемы, точно определяя версию некоторых зависимостей, чтобы облегчить жизнь pub get/pub upgrade, и добавляя некоторые dependency_overrides для принудительного устранения некоторых несоответствий.
Добавляйте переопределения по одному, пока не перестанут возникать ошибки.

В вашем случае мне пришлось добавить довольно много переопределений

dependency_overrides:
  analyzer: ^0.22.4
  barback: ^0.15.2+2
  code_transformers: ^0.2.3+2
  di: ^3.3.3
  route_hierarchical: ^0.6.1

Таким образом вы заставляете пакеты использовать зависимости, с которыми они не тестировались, но это единственный способ решить эту проблему (кроме обновления самих зависимостей для использования более новых версий, но это обычно контролируется другими).

person Günter Zöchbauer    schedule 29.01.2015

Решатель версий Pub выполняет глобальный анализ всех ограничений версий во всех ваших зависимостях. Более того, каждая версия зависимости имеет разные ограничения.

Это означает, что сбои ограничений могут быть нелокальными. Дело не только в том, что async_await имеет ограничение, вызывающее проблему. Это может быть так:

  • async_await добавляет ограничение на foo.
  • Это вынуждает вас использовать другую версию foo, чем в противном случае.
  • Это, в свою очередь, дает вам другой набор ограничений, исходящих из foo.
  • Те, в свою очередь, настраивают некоторые версии других зависимостей.
  • Что затем приводит к другим различным ограничениям...
  • И так далее...

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

Как предлагает @Günter, обходной путь состоит в том, чтобы переопределить пару зависимостей, что может вызвать собственные проблемы. (По сути, это превращает сбой «время получения паба» в возможный сбой во время выполнения.)

person munificent    schedule 29.01.2015