Wie kann ich den Maven-Compiler konfigurieren, um Java 5 für meinen Testcode und Java 1.4 für meinen Hauptcode zu verwenden?Verschiedene Maven-Compiler-Versionen für Test und Main
Antwort
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>
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>
- 1. Boost :: Test - Generierung von Main()?
- 2. Unit-Test verschiedene Flagwerten
- 3. Java-Unit-Test für verschiedene Eingabedaten
- 4. Selen Wbdriver Test für verschiedene Locales
- 5. Verwenden verschiedener Test-Runners für verschiedene Tests
- 6. gleiche Einheit Test für verschiedene Implementierungen
- 7. Splitting Main und Test in Gradle's Eclipse baut
- 8. Unterschied zwischen void main und int main?
- 9. Lade verschiedene application.yml in SpringBoot Test
- 10. gui und main() Methode
- 11. Ignorieren Teil-String und verschiedene
- 12. Verschiedene parametrisierte Argumente für verschiedene Tests JUNIT
- 13. Unterschied zwischen main (void) und main() in C
- 14. Definition für main() in C
- 15. Einstellungsumgebung für Test und Produktion
- 16. Hudson - verschiedene Build-Ziele für verschiedene Trigger
- 17. Go Unit-Testing fatals und testen main()
- 18. Testen von Angular Service im Karma: Selber Test, verschiedene Ergebnisse
- 19. verschiedene Konfigurationsdateien für verschiedene Server
- 20. Verschiedene Menü für verschiedene Fragmente
- 21. verschiedene Kernel für verschiedene Architekturen
- 22. Jenkinsfile und verschiedene Strategien für Niederlassungen
- 23. Verschiedene LoginUrl für verschiedene URLs mit ASP.NET MVC und Formularauthentifizierung
- 24. Was bedeutet src/main/java und src/test/java in einem Maven-Projekt?
- 25. java Ausnahme im Thread "main" java.net.UnknownHostException: Test: Test: unbekannter Fehler OS ubuntu
- 26. Angeben des gleichen Edelsteins zweimal für Entwicklung/Test und Produktion, aber verschiedene Pfade
- 27. Verschiedene P-Werte für Chi-Quadrat-Test in Python und R
- 28. Verschiedene Daten für verschiedene Benutzer
- 29. Verschiedene Bilder für verschiedene Dimensionen
- 30. Verschiedene security.yml-Dateien für verschiedene Umgebungen
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 ' 'scheint Vorrang zu haben, und es schlägt fehl. –
Die Lösung ist, dass es ' default-testCompile ' ist, die das Standardverhalten überschreibt. Die obige Antwort fügt eine zusätzliche Ausführung hinzu. –
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? –