Подтвердить что ты не робот

Как использовать платформу платформы в Maven для определения зависимости?

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

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

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

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

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

В качестве примера:

Person1

  • (используя linux i686) строит проект
  • x86 libaries привязаны к каждому подпроекту и результирующие артефакты строятся

Person2

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

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

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

Изменить профайлы

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

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

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

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

4b9b3361

Ответ 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

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

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