2012-03-30 13 views
7

To doprowadza mnie do szaleństwa. Wtyczka Maven failsafe nie działa w moim projekcie. Jeśli uruchomię mvn verify, będzie działał tylko mur kontrolny. Gdybym wpisać mvn failsafe:verify nie powiedzie się z powodu następującego błędu:Wtyczka failsafe nie działa w jednym projekcie, ale działa na innym - dlaczego?

[INFO] Scanning for projects... 
[INFO]                   
[INFO] ------------------------------------------------------------------------ 
[INFO] Building Simulation Experiment Server 1.0 
[INFO] ------------------------------------------------------------------------ 
[INFO] 
[INFO] --- maven-failsafe-plugin:2.11:verify (default-cli) @ experiment-server --- 
[INFO] Failsafe report directory: C:\IdeaProjects\experiment_server\target\failsafe-reports 
[INFO] ------------------------------------------------------------------------ 
[INFO] BUILD FAILURE 
[INFO] ------------------------------------------------------------------------ 
[INFO] Total time: 0.551s 
[INFO] Finished at: Fri Mar 30 11:24:58 GMT-06:00 2012 
[INFO] Final Memory: 5M/15M 
[INFO] ------------------------------------------------------------------------ 
[ERROR] Failed to execute goal org.apache.maven.plugins:maven-failsafe-plugin:2.11:verify (default-cli) on project experiment-server: C:\IdeaProjects\experiment_server\target\failsafe-reports\failsafe-summary.xml (The system cannot find the path specified) -> [Help 1] 
[ERROR] 
[ERROR] To see the full stack trace of the errors, re-run Maven with the -e switch. 
[ERROR] Re-run Maven using the -X switch to enable full debug logging. 
[ERROR] 
[ERROR] For more information about the errors and possible solutions, please read the following articles: 
[ERROR] [Help 1] http://cwiki.apache.org/confluence/display/MAVEN/MojoExecutionException 

To narzekają nie znalezienia failsafe-summary.xml. Ale powinno to zostać stworzone przez wtyczkę. A Wtyczka działa w porządku (i tworzy plik failsafe-summary.xml gdybym Run Antonio Goncalves wspaniały Arquillian example project.

Więc skopiowany dokładne informacje wtyczki Antonio wykorzystuje i nadal nie będzie działać na moim projekcie. Mam wzorowany mój POM być dokładnie jak jego (z wyjątkiem bez rodzica pom) - coś musi pójść nie tak, po prostu nie wiem co, dlaczego bezpieczny program działa na jego projekcie, ale nie mój?

Oto mój niezawodny pom .xml wpis, który jest pobierany od niego i jest taki sam jak ten na stronie z informacjami dotyczącymi bezpiecznego logowania):

<plugin> 
    <groupId>org.apache.maven.plugins</groupId> 
    <artifactId>maven-failsafe-plugin</artifactId> 
    <version>${version.maven.failsafe.plugin}</version> 
    <configuration> 
    </configuration> 
    <executions> 
     <execution> 
      <goals> 
       <goal>integration-test</goal> 
       <goal>verify</goal> 
      </goals> 
     </execution> 
    </executions> 
</plugin> 

Dzięki za pomoc, to doprowadza mnie do szaleństwa.

UPDATE Ok, wydaje mi się zdobyć ten problem cannot find failsafe-summary.xml stałe - zmienić swój katalog z experiment_server do experiment-server. Domyślam się, że messes up failsafe.

Ale nadal mam problemy z uzyskaniem bezpiecznego połączenia z poleceniem mvn verify lub mvn integration-test. Oba te polecenia wywołują surefire zamiast failsafe. Mogę teraz uruchomić usługę failsafe bezpośrednio, używając polecenia: mvn failsafe:integration-test, ale czy nie powinno się automatycznie uruchamiać failsafe z mvn verify? Mój mvn help:effective-pom pokazuje, że jest bezpieczny w razie awarii, więc to nie problem ... Jakieś pomysły?

+0

Który wariant Maven prowadzisz? – khmarbaise

+0

Czy można dodać dane wyjściowe z przebiegu, w którym IT nie są uruchomione? Jak zadzwoniłeś do Mavena? – khmarbaise

+0

Uruchamiam Mavena 3.04. Nie rozumiem, o co pytasz w swoim drugim pytaniu. Czy możesz to zmienić? –

Odpowiedz

11

Spójrz na failsafe docs dla nazw testowych failsafe oczekuje domyślnie:

<includes> 
    <include>**/IT*.java</include> 
    <include>**/*IT.java</include> 
    <include>**/*ITCase.java</include> 
</includes> 

Czy Twoje testy nazwane po jednej z tych wzorów? Jeśli nie, spróbuj zdefiniować element <includes> w konfiguracji wtyczki. Lub zmień swoje nazwy testowe, aby pasowały do ​​domyślnego wzorca.


Dobrze, że teraz mamy zweryfikowane nazwy klas testu - zwykle po dodaniu do egzekucji plugin config robię to tak:

<plugin> 
    <groupId>org.apache.maven.plugins</groupId> 
    <artifactId>maven-failsafe-plugin</artifactId> 
    <version>${version.maven.failsafe.plugin}</version> 
    <configuration> 
    </configuration> 
    <executions> 
     <execution> 
      <id>failsafe-integration-tests</id> 
      <phase>integration-test</phase> 
      <goals> 
       <goal>integration-test</goal> 
      </goals> 
     </execution> 
     <execution> 
      <id>failsafe-verify</id> 
      <phase>verify</phase> 
      <goals> 
       <goal>verify</goal> 
      </goals> 
     </execution> 
    </executions> 
</plugin> 

To wyraźnie wiąże failsafe cele wtyczek ty chcesz uruchomić na właściwych etapach cyklu budowy. Uważam, że wtyczka surefire jest domyślnie powiązana z fazą cyklu życia test (w przypadku słoika, wojny, tak czy inaczej), ale nic nie jest związane z integration-test lub verify.

+0

Tak, moje testy integracji mają nazwę foobarIT.java. Próbowałem nawet jawnie umieszczać 'includes' w (i zrobił to ponownie teraz, na wszelki wypadek). Problemem nie jest to, że bezpieczny system nie znajduje moich testów - robi to, gdy uruchamiam 'mvn failsafe: integration-test'. Problem polega na tym, że po uruchomieniu 'mvn verify' lub' mvn integration-test' failsafe nie jest wywoływany. –

+0

I to się stało! Zastanawiam się, dlaczego '" test integracji 'nie działał wcześniej. Dziwne. Mimo wszystko dziękuję! –

0

Jeśli używasz wersji 2.12.2 wtyczki failsafe, jest to normalne. Przejdź do poprzedniej wersji. Wydaje się, że 2.13 nie jest jeszcze dostępny.

Jira link

2

Tutaj będę dzielić moje 2 centy. Miałem ten sam problem i powyższe rozwiązanie nie rozwiązało mojego problemu.

Posiadałem maven-failsafe-plugin zamknięty w tagu pluginManagement. Zauważyłem, aby przenieść go do wtyczek tag zamiast kiedy zobaczyłam ten dokument w schemacie 4.0.0 maven:

Default plugin information to be made available for reference by projects derived from this one. This plugin configuration will not be resolved or bound to the lifecycle unless referenced. Any local configuration for a given plugin will override the plugin's entire definition here.

Mam nadzieję, że ta dodatkowa informacji. rozwiązuje więcej problemu, jak ja sam.

+0

Nawiasem mówiąc, ta gwarancja jest czasami naruszona. Na przykład, jeśli zdefiniujesz wtyczkę jRebel w sekcji pluginManagement nadrzędnego pom, wtyczka jRebel maven będzie działała w każdym podprojekcie, nawet jeśli nie zostanie jawnie dodana do definicji wtyczki projektu podprojektu. Tak więc, uważaj. –

1

Dla mnie to działało tylko po dodaniu „default” obejmuje.

<plugin> 
     <groupId>org.apache.maven.plugins</groupId> 
     <artifactId>maven-failsafe-plugin</artifactId> 
     <version>2.15</version> 
     <configuration> 
      <includes> 
       <include>**/IT*.java</include> 
       <include>**/*IT.java</include> 
       <include>**/*ITCase.java</include> 
       <include>**/IntegrationTest*.java</include> 
      </includes> 
     </configuration> 
     <executions> 
      <execution> 
       <id>failsafe-integration-tests</id> 
       <phase>integration-test</phase> 
       <goals> 
        <goal>integration-test</goal> 
       </goals> 
      </execution> 
      <execution> 
       <id>failsafe-verify</id> 
       <phase>verify</phase> 
       <goals> 
        <goal>verify</goal> 
       </goals> 
      </execution> 
     </executions> 
    </plugin> 
Powiązane problemy