Как исключить модуль из сборки реактора Maven?

У нас есть проект Maven 2 с множеством модhive. Пример:

 common foo data bar ... more ...  

Предположим, что модуль «данных» занимает много времени, и мы хотим исключить его, когда проект будет построен сервером CI. В настоящее время для этого мы используем два файла pom.xml. В нем есть все модули, а в другом – все модули, кроме тех, которые могут быть исключены для CI. Но это довольно раздражает, потому что иногда мы забываем поместить новый модуль в оба файла.

Есть ли решение, которое не нуждается в двух отдельных списках модhive?

6 Solutions collect form web for “Как исключить модуль из сборки реактора Maven?”

Самый простой способ – использовать такие profiles :

  ...  common foo bar  ...   expensive-modules-to-build  data     

Затем вы должны проверить способы активации профилей

С Maven 3.2.1 теперь вы можете использовать -pl !,! чтобы исключить определенные модули из сборки реактора.

См. Этот запрос функции: https://jira.codehaus.org/browse/MNG-5230

Проекты для сборки также могут быть указаны в командной строке mvn. Это избавит вас от необходимости отдельного pom, но вместо этого вам придется менять конфигурацию CI каждый раз, когда появляется новый модуль.

 -pl,--projects  Comma-delimited list of specified reactor projects to build instead of all projects. A project can be specified by [groupId]:artifactId or by its relative path. 

Может быть, комбинация этого флага и --also-make-dependents или --also-make будет еще больше снизить это бремя обслуживания.

 -am,--also-make If project list is specified, also build projects required by the list -amd,--also-make-dependents If project list is specified, also build projects that depend on projects on the list 

Я предполагаю, что вы хотите, чтобы assembly по умолчанию всегда создавала все, независимо от скорости, чтобы новые разработчики могли быстро начать работу, не понимая много о POM. Вы можете использовать такие профили:

  common foo bar  ...   expensive-modules-to-build  true   data     

Проблема заключается в том, что если разработчик указывает другой профиль в командной строке, то expensive-modules-to-build не includeся (если разработчик не указывает это). Это затрудняет запоминание того, какие профили необходимо включить.

Вот хакерский подход. Оба профиля всегда включены, поскольку файл pom.xml всегда существует. Поэтому, чтобы исключить дорогостоящие модули, вы можете использовать -P!full-build в командной строке.

   full-build   pom.xml    data    short-build   pom.xml    common foo bar    

Еще одна идея: модули реактора могут быть вложенными, поэтому необходимо объединить ваши быстрые и медленные модули в отдельные посты, а затем добавить еще один агрегатор, содержащий эти два в качестве модhive. Ваш CI-сервер может тогда ссылаться только на поместье, содержащее быстрые строительные модули.

 fast  fast-a fast-b fast-c  all  fast slow  

Вы можете использовать профили maven. В нашей среде сборки мы quick создали профиль, который отключает многие плагины и выполняет тестирование.

Это делается путем

   quick  true         

И затем мы вызываем maven следующим образом

 mvn groupId:artifactId:goal -P quick 

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

  • Как управлять аргументами VM для maven-jetty-plugin?
  • Есть ли способ сказать surefire пропустить тесты в определенном пакете?
  • Как вручную установить артефакт в Maven 2?
  • Что заставляет импортированный проект Maven в Eclipse использовать Java 1.5 вместо Java 1.6 по умолчанию и как я могу убедиться, что это не так?
  • Как обновить repository maven в Eclipse?
  • Maven: Как изменить путь к целевому каталогу из командной строки?
  • Каков наилучший способ избежать maven-jar?
  • SLF4J: путь classа содержит несколько привязок SLF4J
  • Как выполнить программу с помощью Maven?
  • Есть ли простой способ удалить неиспользуемые зависимости из maven pom.xml?
  • Отсутствие зависимостей Maven в проекте Eclipse
  • Interesting Posts

    В каком порядке следует устанавливать драйверы, программы и обновления после установки новой Windows?

    MKMapView Zoom и Region

    Обнаружить, если метод был переопределен с помощью Reflection (C #)

    Есть ли торрент-клиенты, которые работают как служба?

    Как убить процесс зомби на mac

    Ручное закрытие порта из командной строки

    Минимальный размер части данных сегмента TCP

    Невозможно изменить шрифт по умолчанию для PowerShell для Lucida Console

    Какова цель свойства classификатора зависимостей зависимостей Mavens?

    Как избежать символа буквенного процента, когда включена опция NO_BACKSLASH_ESCAPES?

    Удаленное соединение JMX

    Excel отображает ### для длинного текста – что не так?

    Редактирование записей контекстного меню Windows после операции перетаскивания правой кнопкой мыши

    Метаданные не были загружены с использованием MetadataType

    JComponents не отображается с фоном изображения?

    Давайте будем гением компьютера.