2009-07-31 7 views

Antwort

24

Wenn Sie die Konformität mit der relevanten Java-Version festlegen möchten, können Sie das Compiler-Plugin für jede Ausführung konfigurieren. Angenommen, Maven verwendet ein JDK mindestens so aktuell wie die höchste von Ihnen angegebene Version. Durch die Eigenschaften verwenden Sie diese Konfiguration auf der Kommandozeile überschreiben können, 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 meinen, mit verschiedenen Compiler, das ist ein bisschen mehr beteiligt. da Sie den Pfad zum JDK und die von Ihnen verwendete Compiler-Version angeben müssen. Auch diese können in Eigenschaften definiert werden. Auch wenn Sie sie in Ihrer 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> 

Hinweis definieren möchten könnte es Sinn machen, die Compiler-Konfigurationen in Profile zu definieren, eine für jeden Sie JDK unterstützen, so dass Ihre auf Eigenschaften beruhen nicht normalen baut eingestellt werden.

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

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

Als ich das erste Beispiel mit Quell- und Zielversion versuchen '1.8' für Tests und' 1.7' für Hauptcode, die Kompilierung, wenn 'mvn compile' gelingt wird getrennt von 'mvn test-compile' ausgeführt, aber in Kommandos wie' mvn compile test-compile' oder, einfacher gesagt, 'mvn test-compile' (wobei' compile' eingezogen wird) die Hauptkonfiguration mit ' 1.7 'scheint Vorrang zu haben, und es schlägt fehl. –

+2

Die Lösung ist, dass es ' default-testCompile' ist, die das Standardverhalten überschreibt. Die obige Antwort fügt eine zusätzliche Ausführung hinzu. –

+0

Verzeihen Sie mein Unverständnis über Hinrichtungen. Wird dies dazu führen, dass der Hauptanwendungscode beim Ausführen von Maven-Tests zur gleichen Zielversion wie der Testcode kompiliert wird? Oder haben die Haupt- und Testquellen unterschiedliche Ziel-Bytecode-Versionen? –

9

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

Aber ich fand heraus, es gibt separate Konfigurationsparameter für die Testquelle und Ziel.

für mich So ist die Lösung, die funktionierte 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> 
Verwandte Themen