В первой части этой серии статей я рассмотрел использование составных репозиториев, чтобы обеспечить способ объединения сайтов обновлений в один URL-адрес для простоты использования и единой точки входа, с которой можно выполнять обновления.
Определение цели
Теперь я хотел бы поговорить о том, как избежать распространения молний, необходимых для создания целевой платформы. Для тех, кто не знаком с термином «целевая платформа», это либо установленная база, для которой вы компилируете свой код, либо набор вещей, которые вы должны установить в первую очередь, прежде чем устанавливать что-либо поверх этого.
Для случая JBoss Tools у нас есть как минимум 8 предварительных требований для установки. Вот что вы должны были установить до JBoss Tools 3.1.1:
Разумеется, поскольку существует также сайт обновлений Ganymede , вам не обязательно загружать и распаковывать все эти zip-архивы для установки JBoss Tools — вместо этого вам нужно только включить сайт Ganymede . (Та же история для Helios и JBoss Tools 3.2 .)
Однако, чтобы сделать воспроизводимую сборку на основе PDE, вам все равно нужно создать эту базовую установку. Традиционно подход PDE состоял в том, чтобы загрузить и распаковать эти zip-файлы в корень установки Eclipse, на которой выполняется сборка. Athena попыталась улучшить эту ситуацию, позволив вам определить список сайтов обновлений и IU (функций и / или плагинов), которые были необходимы для определения платформы. Но это было далеко от портативного и вряд ли многоразового использования.
Бакминстер (позже b3) также подошел к этой проблеме, создав собственную разметку для определения того, какие сайты и какие IU следует устанавливать, опираясь на модель EMF. Но вместо того, чтобы иметь дело с пользовательским интерфейсом для создания модели и ее заполнения, я обнаружил, что более полезно просто сгенерировать экземпляр модели агрегатора, а затем использовать агрегатор для извлечения и установки IU. Но поскольку агрегатор является просто оболочкой для базовых задач p2.mirror и p2.director, вы можете использовать их также напрямую.
Но, как говорится … « Не надоедай, иди в хор! » Итак, вот пример кода для различных решений для обеспечения во время сборки.
- Использование агрегатора Бакминстера ( файл свойств ) — у нас перестали работать с Eclipse 3.6, поэтому мы перешли на b3
- Использование агрегатора b3 ( файл свойств ) — перестал работать последовательно из-за тайм-аутов сети, разрешающих задержки и выборку IU.
- Использование p2.mirror — основной задачи p2 ant для зеркалирования одного или нескольких репозиториев на локальный диск
- Использование p2.director — основной задачи p2 ant для установки IU (из локального или удаленного репо) в некоторый целевой Eclipse
Таким образом, с помощью этих инструментов вы можете создать репозиторий p2 из других репозиториев — зеркалировать и устанавливать IU по мере необходимости — и даже создавать сценарии установки. Но был ли лучший способ?
Файл определения целевой платформы
Введите файл определения целевой платформы (.target). Этот файл содержит список IU и репозитории p2, из которых они предоставляются. Таким образом, это похоже на агрегаторную модель b3 или файл build.properties Athena , но абстрагированный от концепции сборки, поскольку его можно использовать для сборки, но ТАКЖЕ для обеспечения установленной пользователем базы Eclipse.
К сожалению, редактор файла определения целевой платформы в Eclipse 3.6 менее оптимален для больших целей или когда ваше интернет-соединение неоптимально. Итак, после некоторой борьбы с ним, регистрации ошибок и, в конечном итоге, сдачи, я вернулся к своему удобному редактору XML (часто просто vim), чтобы поддерживать его проще. Поэтому вместо того, чтобы Eclipse автоматически устанавливал вещи на основе файла .target, я возвращаюсь к рабочему процессу, который действительно работает: установка вручную с сайта обновлений.
В то время как Buckminster поддерживает файлы .target (или я так прочитал ), я не хотел больше зависеть от этого, предпочитая более «чистое» решение.
Итак, основываясь на коде Питера Нехрера ( @pnehrer ), я затем написал XSL-преобразование для создания сценария p2.mirror из файла .target, обернутого другим сценарием Ant (и, необязательно, сценарием Maven pom.xml ).
И почему тебя это может волновать? Ну, этот файл .target может быть использован для:
- Подготовьте Eclipse для разработчика, используя редактор определений целевой платформы и несколько щелчков мышью (когда время не истекает )
- Предоставление Eclipse для разработчика с помощью сценария для автономного или нескольких пользователей (для ускорения работы команды)
И да, многое (или все) из вышеперечисленного может быть сделано с Бакминстером и / или b3, если вам нравится такой подход.
Но я предпочитаю создавать .target в качестве входных данных для процесса сборки, а не связывать его с ним явно. Итак, как я уже отмечал выше, если у вас есть файл .target, вы можете легко сгенерировать репозиторий p2 и использовать его для запуска последующих сборок. Теперь вместо полудюжины почтовых индексов для загрузки и распаковки при каждой сборке (с использованием устаревшего и неподдерживаемого метода « dropins ») вы можете использовать полностью подходящий для p2 сайт репо, который содержит все, что вам нужно для сборки — будь то Вы сервер Hudson или разработчик, работающий дома или в автономном режиме.
Выгоды
- В отличие от «коллекции zips», этот сайт с одним источником может быть версионирован с каждым выпуском.
- Он содержит только то, что вам действительно нужно, а не посторонние источники и документы и тангенциальные плагины / функции, которые вы не делаете. Это немного похоже на приготовление кексов, сначала размалывая собственную муку, но, по крайней мере, вы знаете, что в этой смеси нет ничего злого, и вы сможете последовательно воспроизводить рецепт каждый раз, независимо от того, где вы находитесь на интервеже.
- Если вы увлеченный / бета-тестер, которому нравится собираться в соответствии с последним этапом (или даже еженедельной интеграционной сборкой) Eclipse 3.next или 4.future, вы можете использовать приведенный выше скрипт для самообновления. Таким образом, хотя сам TP представляет собой автономный снимок, в котором перечислены явные версии необходимых групп объектов, его также можно запускать в режиме « получения последней доступной версии », чтобы сохранить актуальность TP в некоторых разработках / выпусках HEAD или магистрали.
- Разделив TP из сборки, вы можете построить ее вверх по течению . Итак, если раньше у нас был один «uberbuild» и подразумеваемый TP, то теперь у нас есть задание по сборке TP, которое затем разделяется 34 последующими заданиями, которые зависят от него в зависимости от их зависимостей.
Заткнись и покажи мне код!
Вот и все. Я также обернуть сценарий build.xml муравья ж / с П , который позволяет ему быть вызван из предшествующего процесса Maven / Tycho, но в этом нет ничего больше , чем просто вызов сценария с использованием antrun плагина (и несколько муравьиных зависимостей), как это :
В третьей части я вернусь к тому успеху, который у нас был при использовании ассоциированных сайтов вместо того, чтобы просить людей вручную добавлять сторонние URL при установке JBoss Tools. СПОЙЛЕР ПРЕДУПРЕЖДЕНИЕ : один URL проще для людей, чем 6.
В четвертой части я немного расскажу о том, как предотвратить сборку вашего продукта из неофициальных источников, и предварительно загрузлю ваш продукт официальными сайтами, с которых можно получать обновления. Потому что важно сбалансировать простоту использования с предотвращением неподдерживаемых функций. SPOILER ALERT : может содержать p2.inf инструкции.
От http://divby0.blogspot.com/2011/01/simplifying-p2-process-part-2-target.html