Как использовать платформу платформы в Maven для определения зависимости?
Как говорится в вопросе, есть хороший способ использовать зависимости, основанные на архитектуре платформы, при создании артефактов maven. Я знаю про профили и как их использовать. Для этой специальной цели я не хочу включать их в свою сборку.
Подробную проблему можно описать следующим образом:
- Проект с несколькими модулями maven
- Непрерывная интеграция, и люди в проекте используют равномерно распределенные архитектуры платформ.
- Зависимость от собственной системной библиотеки
Решения, которые я не хочу использовать в настройках:
- Отсутствие избыточности зависимостей
- Нет профилей maven (или, по крайней мере, профили maven, которые автоматически выбираются архитектурой платформы)
В качестве примера:
Person1
- (используя linux i686) строит проект
- x86 libaries привязаны к каждому подпроекту и результирующие артефакты строятся
Person2
- (используя win32) строит проект
- 32-разрядные библиотекари поставляются в комплекте, как указано выше.
Непрерывная интеграция
- работает как производственная среда на linux amd64
- интегрировать библиотеки amd64
Изменить профайлы
Я знаю, что профили - одно из решений для этого. Но я хочу добиться того, что вы проверяете свой проект из какого-то случайного источника контроля версий и строите проект с родными библиотеками из коробки без каких-либо действий (при условии, что платформа удовлетворяет требованиям настроенных).
Я не хочу настраивать эти параметры профиля, и я не хочу явно запускать конкретную цель. Если есть такая вещь с профилями, я бы хотел увидеть пример, который автоматически определяет архитектуру платформы и запускает цель. ЕСЛИ есть один без профилей, я бы предпочел бы его, потому что он намного менее сложный, имея разные существующие комбинации профилей (включая тесты и другие случаи использования).
Имея только профили, мне немного вздувается, и требуются ручные усилия.
Надеюсь, у кого-то есть опрятное предложение, потому что им так или иначе застряли на этом.
Ответы
Ответ 1
Я не знаю, как это сделать без профилей. Это основной прецедент, для которого профили были добавлены в maven. Вы можете сделать это, используя следующее:
<profiles>
<profile>
<activation>
<os>
<name>Windows XP</name>
<family>Windows</family>
<arch>x86</arch>
</os>
</activation>
...
</profile>
<profile>
<activation>
<os>
<family>Linux</family>
<arch>x64</arch>
</os>
</activation>
...
</profile>
<profile>
<activation>
<property>
<name>integration-test</name>
</property>
</activation>
...
</profile>
</profiles>
Затем, когда кто-то проверяет проект и создает его на машине x64 для Linux, он автоматически получит все под профилем x64 для Linux. Если они также предоставили свойство -Dintegration-test
в командной строке, они также активировали бы профиль интеграции-теста. У вас может быть любое количество активных профилей, которые объединены для создания эффективного POM для сборки. Эти профили могут быть определены в общей родительской POM для всех проектов, над которыми вы работаете, поэтому разработчикам не нужно изменять файлы settings.xml.
Чтобы получить дополнительную информацию об активации профилей, выполните следующие действия: http://maven.apache.org/guides/introduction/introduction-to-profiles.html.
Ответ 2
В чем проблема с использованием профилей? Они были сделаны именно для такой ситуации. Вы можете указать действие профиля с помощью ОС/платформы и добавить зависимость. Полностью прозрачный.
Другим способом было бы переместить вашу основную библиотеку в отдельный модуль и иметь модуль для каждой платформы.