Domanda

Voglio correre il plugin Maven compilatore in una fase diversa e con diverse sourceDirectories e destinationDirectories in modo tale che il codice da directory diverse da src / main / java e src / test / Java può essere utilizzato.

Ho pensato che la soluzione sarebbe simile al di sotto, in cui la fase ero collegandolo a stato pre-integrazione-test. Tuttavia le proprietà per testSourceDirectory e testOutputDirectory non sembrano essere specificati in questo modo in quanto sono nella sezione del 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>

C'è un modo per ottenere questo plug-in per compilare diverse directory in diverse fasi senza compromettere il funzionamento di default?

È stato utile?

Soluzione

Le directory di origine sono impostati al di fuori del compilatore-plugin all'interno dell'elemento , quindi questo non funzionerà.

È possibile utilizzare l'Costruiamo-helper-maven-plugin aggiungi-source e add test-source per specificare directory di origine aggiuntivi nel test di integrazione, ma questo sarà non eliminare le dirs origine esistenti.

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

Se si associa il add-test-source obiettivo di correre appena prima del testCompile obiettivo, saranno inclusi i test di integrazione. Nota che si desidera loro di essere uscita per indirizzare / test-classi in modo infallibile il plugin li troverà.

Per gestire la rimozione delle fonti di prova standard, ho scritto un piccolo plugin per modificare il modello per rimuovere posizioni TestSource esistente prima di aggiungere quelle per i test di integrazione.

Altri suggerimenti

Dopo ulteriori ricerche è evidente questo non è effettivamente possibile in Maven 2 nel modo che voglio, un hack di una qualche forma è necessario introdurre test di integrazione. Mentre è possibile aggiungere altre directory (come suggerito da Rich venditore) non v'è alcun plugin per rimuovere le altre fonti o per compilare una directory separata dalla compilazione principale.

La soluzione migliore che ho trovato per l'aggiunta di test di integrazione è quello di utilizzare prima il plugin accumulo aiuto per aggiungere la directory inttest directory per essere compilato come test.

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

Ora, al fine di ottenere i test di integrazione di eseguire sulla fase di integrazione-test è necessario utilizzare esclude e include per manipolare quando vengono eseguiti come di seguito. Questo consente alcuna parametri personalizzati si potrebbe desiderare (nel mio caso un agente che viene aggiunto tramite 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>
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top