Pull to refresh

Менеджер пакетов для Delphi

Reading time3 min
Views4.6K
image
У меня, как и у многих, давняя история знакомства с Дельфи — в старые добрые времена было модно начинать изучать программирование с уже устаревающего на тот момент GWBASIC’a, и стройного алгоритмичного Паскаля. Дельфи, выросшая из Турбо-Паскаля, произвела позже фурор своей новизной и “компонентным” подходом к разработке. Потом пришли новые мощные языки, веб начал теснить десктоп и я ушел в веб-разработку надолго.
Пару лет назад я пришел в проект, который разрабатывается на Дельфи, и после других языков я понял, что мне иногда неудобно ей пользоваться. В большинстве языков есть понятие “пакета”, менеджеры пакетов и репозитории, которые их хранят, в Дельфи же ничего похожего нет. Все зависимые библиотеки ставятся вручную, и пути к ним нужно прописывать в файле с настройками проекта. Если проект перенести на другой компьютер, то нужно молиться на то, что бы библиотеки там находились в тех же папках. Это ужасно, на мой взгляд. Зависимости должны прописываться в проекте, и потом автоматически скачиваться и устанавливаться, если они не установлены, и все пути к зависимостям должны проставляться автоматически.
Так и появился менеджер пакетов для Дельфи — OwlyCI, о котором я расскажу ниже.

Если вы знакомы с nuget, pear/pecl или, например, cpan, то ничего нового вы здесь не найдете — реализован центральный репозиторий пакетов с публичными и приватными каналами, есть утилита командной строки которая умеет заботиться о зависимостях, строить пакеты, скачивать/закачивать в репозиторий. Пакеты представляют собой .zip-файлы с исходниками и манифестом, описывающим зависимости и правила сборки owlyci.xml.

Для удобства редактирования манифестов пакетов, есть GUI-утилита. А для тех, кому не хочется заморачиваться с манифестами и прочим для своих проектов, а хочется просто автоматически подключить зависимости к текущему проекту в IDE, есть автоматически устанавливаемое расширение (эксперт) для IDE Delphi — owlyExpert. Единственно, это расширение работает для версий дельфи XE и выше (максимум пробовалось на XE4).

Также, OwlyCI поможет определить — будет ли собираться ваш код в других версиях Delphi и под другие платформы (Win32/Win64 на данный момент). Это не заменяет unit-тесты, но позволит быстро оценить насколько сложной будет миграция на новую версию дельфы. В основном legacy-код на новых версиях имеет проблемы со строками, переходом на Win64), ассемблерными вставками, а с выходом нового LLVM-компилятора переход на него может быть жестким. Есть одно но — этот сервис представляется моими знакомыми (знали бы вы, как сложно найти людей с лицензионной дельфой), которые иногда включают “строительную ферму” (по сути, виртуальную машину, на которой происходит скачка новых пакетов, построение под различные варианты конфигураций/платформ, и выдача результатов билда обратно на веб. Пример. Эта функция репозитория не гарантируется — покупать для этого Дельфи у меня нет никакого желания — лишних 60К первый раз и потом по 30К каждые полгода выкидывать радости нет, все держится на доброй воли хороших людей.

Быстрый старт


Все команды документированы на сайте, как и формат манифеста.

Но обычно, если вы не делаете пакеты, а только используете их в своих проектах, то вам будет достаточно знать лишь базовые команды.

0. Найти нужные вам пакеты на сайте.

1. Скачивание / установка пакетов

owlyci --install <имя пакета>


2. В меню Project options
image
выбираем пункт OwlyCI dependencies, добавляем в список нужные проекту зависимости
image

Сохраняем изменения в проект, готово.
Теперь, при компиляции проекта, пути к нужным библиотекам будут вставляться автоматически. Пути к библиотекам, которые вы вставляли ранее вручную сохраняются, потому хорошей идеей является почистить пути к библиотекам от мусора перед или после включения зависимостей.
Если вы скопируете проект на новый компьютер, на котором установлен OwlyCI, зависимости будут скачиваться и устанавливаться автоматически.

Вот, вкратце и все о моем хобби-проекте, который мы сейчас успешно используем в наших рабочих проектах. Если будут вопросы, буду рад на них ответить.
Tags:
Hubs:
+14
Comments22

Articles