Как управлять взаимозависимостями пакетов в миксе?

У меня есть пара полезных библиотек, которые я создал для эликсира. Я поставил их обоих на гексагон. Я уже использую библиотеку A в библиотеке B, и я только что включил библиотеку B в качестве зависимости для библиотеки A. Теперь, конечно, библиотека A не будет собираться.

Ошибка при загрузке проекта: a at / Users / me / fun / a / deps / ar ** (Mix) Попытка загрузить файл ArgumentParser.Mixfile из "/Users/me/fun/a/deps/a/mix.exs", но другой проект с таким же именем уже был определен в "/Users/jistone/fun/a/mix.exs"

Вот что я пробовал до сих пор:

  • удаление a из папки deps
  • удаление a из mix.lock
  • изменение deps/b/mix.exs, добавление path: для записи a deps, указывающей на папку проекта.
  • изменение mix.exs на a и b, чтобы они указывали на их соответствующие папки проекта

Все терпят неудачу с соответствующими сообщениями об ошибках.

Итак, вопрос в следующем: как получить микс для распознавания зависимости, удовлетворяющей текущему строящемуся проекту?


изменить: подробнее

Пакет a - это библиотека для анализа аргументов командной строки. Пакет b - это смешанная задача для создания файлов README.md. В пакете b я использовал пакет a для анализа аргументов командной строки для задачи смешивания. Теперь я пытаюсь использовать задачу смешивания для создания README.md для пакета a и получаю вышеуказанный сбой.

Я могу обойти эту проблему, запустив сеанс IEX и загрузив соответствующие файлы лучей, но я бы хотел, чтобы задача смешивания работала, если это возможно ...


person jisaacstone    schedule 30.12.2015    source источник
comment
Круговые зависимости могут быть признаком того, что код недостаточно хорошо разделен. Вы не задумывались о том, чтобы распаковать третью библиотеку с общими частями? Может быть, объединить две библиотеки в одну? Не зная каких-либо подробностей о коде и конкретных интерфейсах, трудно сказать, какое решение было бы лучшим.   -  person Patrick Oscity    schedule 30.12.2015
comment
Полностью согласен с Патриком в этом. Я бы попытался решить саму циклическую зависимость и не пытался выяснить, как получить микс (или шестнадцатеричный, если на то пошло), чтобы справиться с этим.   -  person Onorio Catenacci    schedule 30.12.2015
comment
@PatrickOscity На самом деле, нет ничего общего. У меня есть библиотека для анализа аргументов командной строки и библиотека для создания документации. Обе библиотеки используют себя и друг друга.   -  person jisaacstone    schedule 30.12.2015
comment
Если они используют себя и друг друга, то их совершенно можно разделить больше. Если A использует B, а B использует A, то переместите часть B, которую использует A, в отдельную библиотеку и, возможно, часть A, которую B использует, в другую библиотеку. В Elixir это не так сложно, как кажется, потому что вы можете использовать зонтичный проект для размещения всех проектов вместе: elixir-lang.org/getting-started/mix-otp/.   -  person Jason Harrelson    schedule 30.12.2015
comment
Да, зонтичный проект подойдет, но в нем нет особого смысла ... публиковать в шестнадцатеричном формате как argument_parser_and_documentation_generator?   -  person jisaacstone    schedule 31.12.2015
comment
Я не могу сказать, но если у вас есть общий код между библиотекой для анализа аргументов командной строки и генерацией документации, я не могу представить, чтобы этот код был чем-то другим, кроме довольно общего. Следовательно, я бы сказал, реорганизуйте общий код в третью библиотеку и вызовите его из двух других. Если у вас есть вызов кода между синтаксическим анализатором CLI и генератором документов, я бы сказал, что у вас серьезные проблемы с согласованностью.   -  person Onorio Catenacci    schedule 31.12.2015


Ответы (1)


3 решения, которые я нашел (ни одно из них не идеальное)

  • Создание проекта readme docgen в качестве эскрипта с последующим удалением его как зависимости.

  • Изменение имени проекта в файле mix.exs, создание документов и их обратное изменение.

  • Загрузка всех файлов лучей с использованием аргумента -pa arg в iex и запуск кода вручную.

person jisaacstone    schedule 31.12.2015