Question

Comment configurer le compilateur maven pour qu'il utilise java 5 pour mon code de test et java 1.4 pour mon code principal?

Était-ce utile?

La solution

Si vous souhaitez définir la conformité avec la version Java appropriée, vous pouvez configurer le plug-in du compilateur pour chaque exécution. En supposant que Maven utilise un JDK au moins aussi récent que la version la plus élevée que vous spécifiez. En utilisant les propriétés, vous pouvez remplacer cette configuration sur la ligne de commande ou sur un enfant si nécessaire:

<plugin>
  <groupId>org.apache.maven.plugins</groupId>
  <artifactId>maven-compiler-plugin</artifactId>
  <configuration>
    <source>${compileSource}</source>
    <target>${compileSource}</target>
  </configuration>
  <executions>
    <execution>
      <id>test-compile</id>
      <phase>process-test-sources</phase>
      <goals>
        <goal>testCompile</goal>
      </goals>
      <configuration>
        <source>${testCompileSource}</source>
        <target>${testCompileSource}</target>
      </configuration>
    </execution>
  </executions>
</plugin>
...
<properties>
  <compileSource>1.4</compileSource>
  <testCompileSource>1.5</testCompileSource>
</properties>

Si vous entendez utiliser différents compilateurs , c'est un peu plus compliqué. car vous devez spécifier le chemin d'accès au JDK et la version du compilateur que vous utilisez. Là encore, ceux-ci peuvent être définis dans des propriétés. Bien que vous souhaitiez peut-être les définir dans votre fichier settings.xml

<plugin>
  <groupId>org.apache.maven.plugins</groupId>
  <artifactId>maven-compiler-plugin</artifactId>
  <configuration>
    <source>${compileSource}</source>
    <target>${compileSource}</target>
    <executable>${compileJdkPath}/bin/javac</executable>
    <compilerVersion>${compileSource}</compilerVersion>
  </configuration>
  <executions>
    <execution>
      <id>test-compile</id>
      <phase>process-test-sources</phase>
      <goals>
        <goal>testCompile</goal>
      </goals>
      <configuration>
        <source>${testCompileSource}</source>
        <target>${testCompileSource}</target>
        <executable>${testCompileJdkPath}/bin/javac</executable>
        <compilerVersion>${testCompileSource}</compilerVersion>
      </configuration>
    </execution>
  </executions>
</plugin>
...
<properties>
  <compileSource>1.4</compileSource>
  <testCompileSource>1.5</testCompileSource>
  <compileJdkPath>path/to/jdk</compileJdkPath>
  <testCompileJdkPath>path/to/test/jdk<testCompileJdkPath>
</properties>

Notez qu'il peut être judicieux de définir les configurations du compilateur dans les profils, une pour chaque kit JDK que vous prenez en charge, afin que vos versions normales ne reposent pas sur des propriétés définies.

De même, dans Maven 3.x, vous devez inclure le paramètre fork lors de la spécification de l'exécutable, , par exemple:

.
  <plugin>
    <artifactId>maven-compiler-plugin</artifactId>
    <version>3.1</version>
    <executions>
      <execution>
        <id>default-testCompile</id>
        <phase>test-compile</phase>
        <goals>
          <goal>testCompile</goal>
        </goals>
        <configuration>
          <fork>true</fork>
          <executable>${testCompileJdkPath}/bin/javac</executable>
          <source>1.8</source>
          <target>1.8</target>
        </configuration>            
      </execution>
    </executions>
  </plugin>

Autres conseils

Je n'ai pas eu de chance avec la réponse acceptée lors de la compilation des sources de test java 7 et java 8 à l'aide du maven-compiler-plugin , version 3.5.1. Parce que le plug-in de compilation a utilisé le paramètre source / target pour les sources principale et principale.

Mais j'ai découvert qu'il existe des paramètres de configuration distincts pour la source et la cible de test.

Donc pour moi, la solution qui a fonctionné était

 <build>
    <plugins>
        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-compiler-plugin</artifactId>
            <version>3.5.1</version>
            <configuration>
                <source>1.7</source>
                <target>1.7</target>
                <testSource>1.8</testSource>
                <testTarget>1.8</testTarget>
            </configuration>
        </plugin>
    </plugins>
</build>
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top