2016-04-02 4 views
0

In unserem Maven-Build verwenden wir das Standardprofil für Builds und ein anderes Profil für Tests. Wenn unsere Tests unter dem Standardprofil ausgeführt werden, brechen sie aus verschiedenen Gründen.In Maven - wie eine Meldung an den Benutzer angezeigt wird, wenn die Überprüfungsphase auf die Standardausführung ausgeführt wird?

zB gut in unserem Team mit unserer Build

mvn -Pfoo verify 

schlecht in unserem Team mit unserer Build

mvn verify 

Wir wollen die Menschen in unserem Team ermutigen, die Tests im Rahmen der 'foo' laufen Lebenszyklus, und warnen sie, wenn sie es nicht tun.

Mein aktueller Ansatz zur Lösung dieses Problems besteht darin, einen neuen todsicheren Test für das Standardprofil zu erstellen und alle Tests außer einem neuen DefaultProfileWarningTest auszuschließen, dessen einziger Zweck es ist, dem Benutzer die Ausführung der Tests unter dem Profil foo mitzuteilen.

So könnte der Test wie folgt aussehen:

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

Mit einer Hinrichtung im pom.xml ähnlich wie:

<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> 

Aber das scheint wie ein overwrought Flickschusterei. Angenommen, wir können das Profil-Ding nicht reparieren - gibt es eine einfache, leichtgewichtige Möglichkeit, dem Benutzer eine Nachricht anzuzeigen, wenn die Überprüfungsphase für das Standardprofil ist?

Meine Frage ist: In Maven - wie eine Meldung an den Benutzer anzuzeigen, wenn die Verify-Phase auf die Standardausführung ausgeführt wird?

+0

Warum benötigen Sie eine Nachricht? Desweiteren nutzt du das maven-surefire-Plugin mit einem Profil ...Wenn diese Tests Integrationstests sind, sollten Sie besser maven-failsafe-plugin verwenden, was bedeutet, dass sie nur ausgeführt werden, wenn Sie 'mvn clean verfiy' machen, wenn Sie' mvn clean package' ausführen, werden sie nicht ausgeführt ... wenn Ihr Teammitglied Ich möchte eine 'mvn deploy' machen die Integrationstests werden ausgeführt ... – khmarbaise

+0

Abgesehen davon, wenn diese Tests brechen, sollten Sie diese Tests reparieren, um sie laufen zu lassen, sonst macht das Ausführen dieser Tests keinen Sinn ... – khmarbaise

+0

Danke @khmarbaise - Das war eine gute Aufforderung - ich habe diese Option untersucht. – hawkeye

Antwort

0

Eine mögliche Lösung wäre, eine Ausführung der maven-antrun-plugin zu definieren, die eine Nachricht mit der echo Aufgabe echos. Es würde übersprungen werden, wenn es unter dem Profil foo unter Verwendung des Attributs skip ausgeführt wird. Der Switch kann aus einer Maven-Eigenschaft erstellt werden, die standardmäßig auf true im Profil foo und false festgelegt ist.

Beachten Sie Folgendes:

<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> 

Dann können Sie Ihre Profile wie so konfigurieren:

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

Wenn das foo Profil aktiviert, wird die isRightProfile Eigenschaft wird auf true eingestellt werden, so dass die Ausführung des AntRun-Plugins wird übersprungen und es werden keine Nachrichten gedruckt. Wenn das Standardprofil aktiviert ist, wird diese Eigenschaft auf false gesetzt, und die Nachrichten werden wiederholt.

0

Sie können einfach ein entsprechendes Plugin wie das echo-maven-plugin verwenden, um eine Nachricht auszudrucken.

<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> 

Wenn Sie Menschen zu zwingen, ein bestimmtes Profil zu verwenden, sollten Sie die maven-enforcer-plugin verwenden, die Sie zwingen können, ein bestimmtes Profil zu verwenden.

Verwandte Themen