2016-04-02 3 views
0

В нашей сборке maven мы используем профиль по умолчанию для сборки и другой профиль для тестов. Когда наши тесты запускаются под профилем по умолчанию, по разным причинам они ломаются.В maven - как отобразить сообщение пользователю, когда этап проверки запускается по умолчанию?

например хорошо в нашей команде с нашей сборкой

mvn -Pfoo verify 

плохого в нашей команде с нашей сборкой

mvn verify 

Мы хотим, чтобы поощрить людей в нашей команде запускать тесты под «Foo» жизненного цикла и предупреждать их, когда они этого не делают.

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

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

public class DefaultProfileWarningTest { 
    @Test 
    public void displayWarning() { 
     System.out.println("The tests aren't running - you should have run **mvn -Pfoo verify**"); 
    } 
} 

С исполнением в pom.xml аналогично:

<profiles> 
    <profile> 
     <id>foo</id> 
     ...  
    </profile> 
    <profile> 
     <id>my-default-profile</id> 
     <activation> 
      <activeByDefault>true</activeByDefault> 
     </activation> 
     <build> 
      <plugins> 
       <plugin> 
        <groupId>org.apache.maven.plugins</groupId> 
        <artifactId>maven-surefire-plugin</artifactId> 
        <version>2.19.1</version> 
        <configuration> 
         <includes> 
          <include>DefaultProfileWarningTest.java</include> 
         </includes> 
        </configuration> 
       </plugin> 
      </plugins> 
     </build> 
    </profile> 
<profiles> 

Но это, кажется, как перегруженный ляп. Предполагая, что мы не можем исправить предмет профиля - есть ли простой облегченный способ отображения сообщения пользователю, когда фаза проверки для профиля по умолчанию?

Мой вопрос: В maven - как отобразить сообщение пользователю, когда фаза проверки запускается по умолчанию?

+0

Зачем вам нужно сообщение? Кроме того, что вы используете плагин maven-surefire, используя профиль ...если эти тесты являются интеграционными тестами, то вам лучше использовать maven-failafe-plugin, что означает, что они будут выполняться только в том случае, если вы выполняете 'mvn clean verfiy', если вы делаете' mvn clean package', они не будут запускаться ... если ваш член команды хотите сделать «mvn deploy», будут проводиться тесты интеграции ... – khmarbaise

+0

Кроме того, если эти тесты ломаются, вы должны исправить эти тесты, чтобы их запустить, в противном случае выполнение этих тестов не имеет смысла ... – khmarbaise

+0

Спасибо @khmarbaise - Это была хорошая подсказка - я пересмотрел этот вариант. – hawkeye

ответ

0

Возможное решение состоит в том, чтобы определить выполнение maven-antrun-plugin, которое эхо передает сообщение с заданием echo. Он будет пропущен при запуске под профилем foo, используя атрибут skip. Переключатель может быть выполнен из свойства Maven, которое установлено в true в профиле foo и false по умолчанию.

Рассмотрим следующий пример:

<plugin> 
    <artifactId>maven-antrun-plugin</artifactId> 
    <executions> 
     <execution> 
      <phase>test</phase> 
      <goals> 
       <goal>run</goal> 
      </goals> 
      <configuration> 
       <target> 
        <echo>The tests aren't running - you should have run mvn -Pfoo verify</echo> 
       </target> 
       <skip>${isRightProfile}</skip> 
      </configuration> 
     </execution> 
    </executions> 
</plugin> 

Затем вы можете настроить профили так:

<profile> 
    <id>foo</id> 
    <properties> 
     <isRightProfile>true</isRightProfile> 
    </properties> 
</profile> 
<profile> 
    <id>my-default-profile</id> 
    <properties> 
     <isRightProfile>false</isRightProfile> 
    </properties> 
    <!-- rest unchanged --> 
</profile> 

Когда foo профиль активирован, свойство isRightProfile будет установлен true, таким образом, исполнение плагина AntRun будет пропущена, и никакие сообщения не будут напечатаны. Когда активируется профиль по умолчанию, это свойство будет установлено в false, и сообщения будут эхом.

0

Вы можете просто использовать соответствующий плагин, например, echo-maven-plugin, чтобы распечатать сообщение.

<plugin> 
    <groupId>com.soebes.maven.plugins</groupId> 
    <artifactId>echo-maven-plugin</artifactId> 
    <version>0.2</version> 
    <executions> 
    <execution> 
     <phase>initialize</phase> 
     <goals> 
     <goal>echo</goal> 
     </goals> 
    </execution> 
    </executions> 
    <configuration> 
    <echos> 
     <echo>This is the Text which will be printed out.</echo> 
    </echos> 
    </configuration> 
</plugin> 

Если вы хотите, чтобы заставить людей использовать определенный профиль, который вы должны использовать maven-enforcer-plugin, которые могут заставить вас использовать определенный профиль.