Frage

Wie kann ich die Maven-Compiler konfiguriert Java 5 für meinen Test-Code zu verwenden und Java 1.4 für meinen Haupt-Code?

War es hilfreich?

Lösung

Wenn Sie die Einhaltung der entsprechenden Java-Version festlegen möchten, können Sie die Compiler-Plugin für jede Ausführung konfigurieren. Unter der Annahme, Maven ist ein JDK mindestens so aktuell wie die höchste Version verwenden Sie angeben. Durch die Verwendung von Eigenschaften können Sie diese Konfiguration auf der Kommandozeile überschreiben oder bei einem Kind, wenn nötig:

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

Wenn Sie verschiedene Compiler bedeuten mit , das ist ein bisschen mehr beteiligt. wie Sie benötigen den Pfad zum JDK und welche Compiler Version Sie verwenden angeben. diese können wieder in den Eigenschaften definiert werden. Obwohl Sie können sie in Ihrem settings.xml definieren

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

Beachten Sie es Sinn machen könnte die Compiler-Konfigurationen in Profile, eines für jedes JDK Sie unterstützen, so dass Ihre normale zu definieren Builds verlassen sich nicht auf Eigenschaften festgelegt werden.

Auch in Maven 3.x, müssen Sie den fork Parameter enthalten, wenn die ausführbare Datei Angabe z.

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

Andere Tipps

hatte ich kein Glück mit der akzeptierten Antwort Java 7 Quelle und Java 8 Testquellen mit der maven-compiler-plugin kompiliert, Version 3.5.1. Da die Kompilierung-Plugin die Quell- / Zielparameter für beide verwendet, Haupt- und Testquellen.

Aber ich herausgefunden habe, gibt es separate Konfigurationsparameter für den Test Quelle und Ziel.

Also für mich die Lösung, die arbeitete, war

 <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>
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top