2009-08-14 12 views
9

Chcę uruchomić wtyczkę maven kompilatora w innej fazie iz różnymi katalogami sourceDirectories i destinationDirectories, aby kod z katalogów innych niż src/main/java i src/test/java mógł być używany.Kompilator niestandardowego katalogu wykonawczego kompilatora Maven2 i katalogu docelowego

Pomyślałem, że rozwiązanie będzie wyglądało jak poniżej, gdzie faza, do której go podłączałem, była testem przed integracją. Jednak właściwości testSourceDirectory i testOutputDirectory nie wydają się być określone w ten sposób, ponieważ są one w sekcji POM.

<plugin> 
    <groupId>org.apache.maven.plugins</groupId> 
    <artifactId>maven-compiler-plugin</artifactId> 

    <executions> 
    <execution> 
     <id>compile mytests</id> 
     <goals> 
     <goal>testCompile</goal> 
     </goals> 
     <phase>pre-integration-test</phase> 
     <configuration> 
     <testSourceDirectory>${basedir}/src/inttest/java</testSourceDirectory> 
     <testOutputDirectory>${basedir}/target/inttest-classes</testOutputDirectory> 
     </configuration> 
    </execution> 
    </executions> 
</plugin> 

Czy istnieje sposób na uzyskanie tej wtyczki do kompilowania różnych katalogów w różnych fazach bez wpływu na domyślną operację?

Odpowiedz

9

Katalogi źródłowe są ustawiane poza wtyczką kompilatora wewnątrz elementu <build>, więc to nie zadziała.

Można użyć build-pomocnik-maven-plugin na add-source i add-test-source aby określić dodatkowe katalogi źródłowe dla testów integracyjnych, ale to nie będzie usunięcia istniejących katalogów źródłowych.

<plugin> 
    <groupId>org.codehaus.mojo</groupId> 
    <artifactId>build-helper-maven-plugin</artifactId> 
    <version>1.3</version> 
    <executions> 
     <execution> 
     <id>add-it-source</id> 
     <phase>pre-integration-test</phase> 
     <goals> 
      <goal>add-source</goal> 
     </goals> 
     <configuration> 
      <sources> 
      <source>${basedir}/src/inttest/java</source> 
      </sources> 
     </configuration> 
     </execution> 
    </executions> 
    </plugin> 

Jeśli powiązać add-test-source cel do uruchomienia tuż przed testCompile cel, twoje testy integracyjne zostaną uwzględnione. Zauważ, że chcesz, aby były wyprowadzane do klas docelowych/testowych, aby znalazła je wtyczka surefire.

Aby usunąć standardowe źródła testowe, napisałem małą wtyczkę, aby zmodyfikować model, aby usunąć istniejące lokalizacje źródła testowego przed dodaniem ich do testów integracji.

4

Po dalszych badaniach jest oczywiste, że w Maven 2 nie jest to możliwe w sposób, w jaki chcę, konieczne jest wprowadzenie jakiejś formy do testów integracyjnych. Chociaż można dodawać kolejne katalogi (zgodnie z sugestią Richa sprzedającego), nie ma wtyczki do usuwania innych źródeł lub kompilowania katalogu oddzielnie od głównej kompilacji.

Najlepszym rozwiązaniem, które znalazłem do dodania testów integracyjnych, jest użycie wtyczki build helper do dodania katalogu inttest do kompilacji jako testów.

<plugin> 
    <groupId>org.codehaus.mojo</groupId> 
    <artifactId>build-helper-maven-plugin</artifactId> 
    <executions> 
     <execution> 
      <id>add-test-source</id> 
      <phase>generate-sources</phase> 
      <goals> 
       <goal>add-test-source</goal> 
      </goals> 
      <configuration> 
       <sources> 
        <source>src/inttest/java</source> 
       </sources> 
      </configuration> 
     </execution> 
    </executions> 
</plugin> 

Teraz w celu uzyskania testy integracyjne wykonać na etapie integracji testu należy użyć wykluczeń i zawiera manipulować kiedy się uruchomić jak poniżej. Pozwala to na dowolne parametry niestandardowe (w moim przypadku agent jest dodawany przez argline).

<plugin> 
<groupId>org.apache.maven.plugins</groupId> 
    <artifactId>maven-surefire-plugin</artifactId> 
    <configuration> 
    <excludes> 
     <exclude>**/itest/**</exclude> 
    </excludes> 
    </configuration> 
<executions> 
    <execution> 
     <id>inttests</id> 
     <goals> 
      <goal>test</goal> 
     </goals> 
     <phase>integration-test</phase> 
     <configuration> 
      <excludes><exclude>none</exclude></excludes> 
      <includes> 
       <include>**/itest/**/*Test.java</include> 
      </includes> 
     </configuration> 
    </execution> 
</executions> 
</plugin> 
+0

Niestety, to również nie działa poprawnie. Wydaje się, że jeśli użyjesz tego testu cobertura: cobertura, wtedy Maven uruchomi testy jednostkowe z pokryciem, potem same testy, a następnie uruchomi testy integracyjne iz jakiegoś powodu zignoruje wykluczenia, ale bierze pod uwagę załączniki. –

Powiązane problemy