Как избежать конкретных версий функций в определениях целей eclipse

У меня есть проект osgi, который разбит на 3 репозитория. Каждый репозиторий имеет собственную сборку в репозиторий p2 с Tycho:

Repo1 -> P2 repo 1
Repo2 -> P2 repo 2
Repo3 -> P2 repo 3

Кроме того, в каждом репозитории есть целевой файл определения, который включает пакеты из сторонних репозиториев p2 и из репозиториев других проектов (репозиторий P21, репозиторий P2 2 или репозиторий P2 3 выше). Repo2 содержит зависимость от пакетов Repo1, Repo3 имеет зависимости от пакетов Repo1 и Repo2:

Repo1 Target Definition -> Eclipse Orbit P2
Repo2 Target Definition -> Eclipse Orbit P2, P2 repo1
Repo3 Target Definition -> Eclipse Orbit P2, P2 repo1, P2 repo2

Теперь у меня следующая проблема. После создания первого репозитория репозиторий P2 repo1 обновился и содержит функцию с новыми версиями моментальных снимков. Целевые определения Repo2 и Repo3 зависят от предыдущей версии снимка пакетов Repo1, и создание этих репозиториев невозможно без обновления соответствующих целевых определений (в Eclipse есть кнопка «Обновить» в Target Editor).

<location includeAllPlatforms="false" includeConfigurePhase="true" includeMode="planner" includeSource="true" type="InstallableUnit">
<unit id="com.myproduct.feature.api.game.feature.group" version="1.0.0.201509251400"/>
<unit id="com.myproduct.feature.impl.game.feature.group" version="1.0.0.201509251400"/>
<repository location="http:............../target/repository/"/>
</location>

Таким образом, невозможно автоматически собрать все 3 репозитория, поэтому процесс сборки становится слишком сложным:

  • Зафиксируйте изменения в первом репо и соберите его с помощью Jenkins.
  • Обновите целевое определение repo2, чтобы оно указывало на новую версию функции repo 1.
  • Зафиксируйте это обновление в repo2 и соберите его с помощью Jenkins.

и т.д....

Теперь я думаю использовать подмодули git для интеграции этих 3 репозиториев, чтобы избежать репозиториев p2 или переместить все в один репозиторий.


person Ivan    schedule 11.11.2015    source источник
comment
Недавно у меня была та же проблема, и я остался с ручным обновлением целевых платформ, потому что было только одно восходящее репо p2, которое не часто менялось. Рассматривали ли вы шаг перед сборкой, который обновляет целевую платформу до последнего снимка (хотя не уверен, что это действительно сработает)?   -  person Rüdiger Herrmann    schedule 12.11.2015


Ответы (1)


Установить версию 0.0.0

Я не знаю, как отредактировать файл .target с помощью Target Editor, чтобы добиться этого, но вы можете ввести номер версии 0.0.0 в целевой файл, отредактировав в XML или текстовый редактор, например:

<location includeMode="planner" includeAllPlatforms="false" includeSource="true" includeConfigurePhase="false" type="InstallableUnit">
  <unit id="com.example.feature.group" version="0.0.0"/>
  <repository id="my_repo" location="http://my/repo/path"/>
</location>

Указав номер версии 0.0.0 в целевом файле, вы должны получить последнюю версию модуля из репозитория p2.

Тем не менее, существуют серьезные недостатки использования этого ленивого (подробнее об имени ниже) способа указания версий. Это очень затрудняет возврат и перестроение старых версий вашего проекта, потому что более старая версия будет использовать последнюю версию зависимости из репозитория p2 вместо правильной версии.

Используйте определение целевой платформы DSL и генератор

Вместо редактирования в целевом редакторе используйте превосходный "ЦСЛ и генератор определения целевой платформы" вместо этого. Это позволяет более разумно редактировать целевые файлы. В приведенном выше случае вы можете использовать ключевое слово версии lazy, чтобы указать, что вы хотите 0.0.0 в качестве номера версии. Это будет выглядеть так:

location "http://my/repo/path" my_repo {
    com.example.feature.group lazy
}

Лучшее из обоих миров

Генератор можно вызвать на командная строка (например, из pom.xml), это позволит вам не указывать номер версии в файле .tpd. Если в файле .tpd нет номера версии, сгенерированный файл .target будет иметь разрешенный номер версии до последней версии. Если вы сохраните сгенерированный файл .target как часть ваших артефактов сборки, вы сможете перестроить более старые версии своего программного обеспечения с правильными зависимостями.

person Jonah Graham    schedule 15.11.2015