Как использовать архитектуру платформы в Maven для определения зависимости? - PullRequest
17 голосов
/ 20 июля 2011

Поскольку вопрос гласит, есть ли хороший способ использовать зависимости, основанные на архитектуре платформы, при создании артефактов maven. Я знаю о профилях и как их использовать. Для этой особой цели я не хочу включать их в мою сборку.

Подробно проблему можно описать следующим образом:

  • Мультимодульный проект Maven
  • Непрерывная интеграция, и люди в проекте используют равномерно распределенные архитектуры платформы
  • Зависимость от собственной системной библиотеки

Решения, которые я не хочу использовать в настройках:

  • Без резервирования зависимостей
  • Нет профилей Maven (или, по крайней мере, профили Maven, которые автоматически выбираются архитектурой платформы)

Как пример :

Person1

  • (с использованием Linux i686) сборка проекта
  • x86-библиотеки подключены к каждому подпроекту, а полученные артефакты находятся в процессе сборки

Персона2

  • (с использованием win32) сборка проекта
  • 32-битные библиотеки включены в пакет, как указано выше

Непрерывная интеграция

  • работает как производственная среда на linux amd64
  • интегрировать библиотеки amd64

Редактировать профиль

Я знаю, что профили являются одним из решений для этого. Но я хочу добиться того, чтобы вы извлекали свой проект из какого-то случайного источника управления версиями и собирали проект из встроенных библиотек из коробки без каких-либо действий (при условии, что платформа удовлетворяет требованиям настроенных).

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

Мне кажется, что раздутые профили немного раздуты, и требуются ручные усилия.

Надеюсь, у кого-то есть аккуратное предложение, потому что я как-то застрял на этом.

Ответы [ 2 ]

21 голосов
/ 20 июля 2011

Я не знаю ни одного способа сделать это без профилей.Это основной вариант использования, для которого были добавлены профили в 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>

Затем, когда кто-то проверяет проект и строит его на компьютере с Linux x64, он автоматически получает все под профилем Linux x64.Если они также предоставят свойство -Dintegration-test в командной строке, они также активируют профиль интеграционного теста.Вы можете иметь любое количество активных профилей, которые объединяются для создания эффективного POM для сборки.Эти профили могут быть определены в общем родительском POM для всех проектов, над которыми вы работаете, поэтому разработчикам не нужно изменять свои файлы settings.xml.

Чтобы получить дополнительную информацию об активации профилей, ознакомьтесь с: http://maven.apache.org/guides/introduction/introduction-to-profiles.html.

1 голос
/ 20 июля 2011

В чем проблема с использованием профилей?Они были сделаны именно для такой ситуации.Вы можете указать действие профиля по ОС / платформе и добавить зависимость.Полностью прозрачный.

Другой способ - переместить вашу базовую библиотеку в отдельный модуль и иметь модуль для каждой платформы.

...