...

четверг, 14 ноября 2013 г.

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

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, зависимости будут скачиваться и устанавливаться автоматически.


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


This entry passed through the Full-Text RSS service — if this is your content and you're reading it on someone else's site, please read the FAQ at fivefilters.org/content-only/faq.php#publishers.


Комментариев нет:

Отправить комментарий