Работа с внешними библиотеками с помощью арматуры - PullRequest
6 голосов
/ 01 апреля 2011

Я хочу использовать некоторые библиотеки в моем приложении, например https://github.com/Panmind/erlang-ruby-marshal.. В этом репозитории хранится каталог src, но нет файла .app (потому что это не приложение), поэтому я не могу использовать get-deps .

Я попробовал другой подход, добавив libs dir в sub_dirs и добавил репо как подмодуль git, но rebar не скомпилирует ни один из его файлов. Я предполагаю, что rebar компилирует только otp-приложения, а не только .erl-файлы, которые не привязаны к приложению.

Как вы управляете такими зависимостями? Я бы не хотел копировать файлы в каталог моего приложения, потому что я не думаю, что они там принадлежат, и мне нравится подход git submodule, который позволяет мне отслеживать используемую версию lib.

Ответы [ 4 ]

3 голосов
/ 25 ноября 2011

Недавняя арматура поддерживает raw параметр для зависимостей.Если этот параметр является специфическим, для арматуры не требуется, чтобы зависимость имела стандартную разметку Erlang / OTP, которая предполагает наличие файлов «src / dependency_name.app.src» или «ebin / dependency_name.app» (подробности см. here ).

Например:

{deps, [
  {erlang_ruby_marshal, "",
    {git, "https://github.com/Panmind/erlang-ruby-marshal", {branch, master}},
    [raw]}
]}.

Обратите внимание, что арматура теперь сможет ее получить, но все равно не скомпилирует.Как отмечали другие комментаторы, нет причины, по которой у этой зависимости не должно быть файла .app.Я бы раскошелил репозиторий и добавил к нему файл .app.

2 голосов
/ 01 апреля 2011

В этой статье проходит более сложный процесс создания приложений и выпусков с арматурой.

Более конкретно, я думаю, что эта опция в rebar.config может быть тем, что вы ищете. Единственный способ, который я нашел до сих пор, - это иметь одну запись для каждого приложения:

{sub_dirs, ["libs/app1",
            "libs/app2",
            ...]}.

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

1 голос
/ 25 ноября 2011

Если вы используете Linux, вы можете добавить необходимые модули в виде жестких ссылок в каталог src своего приложения.

Это далеко не оптимально, но мне еще предстоит найти лучший способ сделать это.

0 голосов
/ 03 апреля 2011

Попросите ребят из Agner добавить их в свою систему управления пакетами.В процессе они создадут вилку и преобразуют ее, чтобы сделать арматуру проекта совместимой.Кроме того, первоначальный сопровождающий вполне возможно интегрирует изменения.

...