Вопрос

Нам необходимо иметь возможность пропускать подмодуль в определенных средах.

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

Есть ли способ сделать это с помощью настроек профиля?Я немного погуглил, просмотрел другие вопросы/ответы здесь и не нашел хорошего решения.

Я полагаю, что один из вариантов — удалить этот подмодуль из родительского. pom.xml полностью и просто добавьте еще один проект на наш CI-сервер, чтобы просто построить этот модуль.

Предложения?

Это было полезно?

Решение

Конечно, это можно сделать с помощью профилей. Вы можете сделать что -то вроде следующего в своем родительском pom.xml.

  ...
   <modules>
      <module>module1</module>
      <module>module2</module>  
      ...
  </modules>
  ...
  <profiles>
     <profile>
       <id>ci</id>
          <modules>
            <module>module1</module>
            <module>module2</module>
            ...
            <module>module-integration-test</module>
          </modules> 
      </profile>
  </profiles>
 ...

В вашем CI вы бы управляли Maven ci профиль, т.е. mvn -P ci clean install

Другие советы

В Maven версии 3.2.1 добавлена ​​эта функция, вы можете использовать -pl выключатель (ярлык для --projects список) с ! или - (источник), чтобы исключить определенные подмодули.

mvn -pl '!submodule-to-exclude' install
mvn -pl -submodule-to-exclude install

Будьте осторожны при bash персонажа!— это специальный символ, поэтому вам придется либо заключить его в одинарные кавычки (как я), либо экранировать его символом обратной косой черты.

Синтаксис исключения нескольких модулей такой же, как и для включения.

mvn -pl '!submodule1,!submodule2' install
mvn -pl -submodule1,-submodule2 install

РЕДАКТИРОВАТЬ Windows, похоже, не любит одинарные кавычки, но в bash они необходимы;в Windows используйте двойные кавычки (спасибо @awilkinson)

mvn -pl "!submodule1,!submodule2" install

Можно решить, какие реакторные проекты создать, указав -pl Аргумент командной строки:

$ mvn --help
[...]
 -pl,--projects <arg>                   Build specified reactor projects
                                        instead of all projects
[...]

Он принимает отдельный список параметров в одной из следующих форм:

  • относительный путь папки, содержащей POM
  • [groupId]:artifactId

Таким образом, учитывая следующую структуру:

project-root [com.mycorp:parent]
  |
  + --- server [com.mycorp:server]
  |       |
  |       + --- orm [com.mycorp.server:orm]
  |
  + --- client [com.mycorp:client]

Вы можете указать следующую командную строку:

mvn -pl .,server,:client,com.mycorp.server:orm clean install

Чтобы все построить. Удалите элементы в списке, чтобы создать только те модули, которые вам нужно.


РЕДАКТИРОВАТЬ: как Черная салдинка указал, что по состоянию на Maven 3.2.1 у вас есть новый -el флаг Это исключает проекты из реактора, аналогично тому, что -pl делает:

Понятие мультимодульных проектов предназначено для удовлетворения потребностей в коде, независимых сегментов проекта. Такой клиент зависит от услуг, которые, в свою очередь, зависит от EJBS или подпрограмм ACCESS. Ты мог Сгруппируйте ваши тесты непрерывной интеграции (CI) таким образом. Я бы рационализировал это, сказав, что тесты CI должны находиться в шаге блокировки с изменениями логики приложения.

Предположим, что ваш проект структурирован как:

project-root
  |
  + --- ci
  |
  + --- client
  |
  + --- server

А project-root/pom.xml Определяет модули

<modules>
  <module>ci</module>
  <module>client</module>
  <module>server</module>
</modules>

А ci/pom.xml определяет профили, такие как:

... 
<profiles>
  <profile>
    <id>default</id>
    <activation>
      <activeByDefault>true</activeByDefault>
    </activation>
    <plugin>
       <artifactId>maven-surefire-plugin</artifactId>
       <configuration>
         <skip>true</skip>
       </configuration>
     </plugin>
  </profile>
  <profile>
    <id>CI</id>
    <plugin>
       <artifactId>maven-surefire-plugin</artifactId>
       <configuration>
         <skip>false</skip>
       </configuration>
     </plugin>
  </profile>
</profiles>

Это приведет к тому, что Maven пропустит тесты в этом модуле, за исключением случаев, когда назван профиль CI активен. Ваш CI -сервер должен быть проинструктирован для выполнения mvn clean package -P CI. Анкет На веб -сайте Maven есть подробное объяснение механизма профилирования.

В настоящее время есть (из версии 1.1.1) флаг «пропустить» в яме.

Итак, вы можете делать что -то вроде:

    <profile>
        <id>pit</id>
        <build>
            <plugins>
                <plugin>
                    <groupId>org.pitest</groupId>
                    <artifactId>pitest-maven</artifactId>
                    <configuration>
                        <skip>true</skip>
                    </configuration>
                </plugin>
            </plugins>
        </build>
    </profile>

в вашем модуле, и яма пропустит

Info] --- Пейтест-Мавен: 1.1.3: MutationCoverage (default-cli) @ module-selenium --- [Информация] Проектирование проекта

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top