Как мне настроить компилятор maven для использования java 5 для моего тестового кода и java 1.4 для моего основного кода?
Различные версии компилятора maven для тестирования и основного
Ответ 1
Если вы хотите установить соответствие для соответствующей версии Java, вы можете настроить плагин компилятора для каждого выполнения. Предполагая, что Maven использует JDK как минимум в качестве самой высокой версии, которую вы указываете. Используя свойства, вы можете переопределить эту конфигурацию в командной строке или дочернем при необходимости:
<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>
Если вы имеете в виду использование разных компиляторов, это немного более активно. так как вам нужно указать путь к JDK и какую версию компилятора вы используете. Опять же, они могут быть определены в свойствах. Хотя вы можете определить их в своих настройках. 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>
Обратите внимание, что имеет смысл определить конфигурации компилятора в профилях, по одному для каждого поддерживаемого JDK, чтобы ваши обычные сборки не полагались на устанавливаемые свойства.
Кроме того, в Maven 3.x вам нужно указать параметр fork
при указании исполняемого файла, например:
<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>
Ответ 2
Мне не повезло с принятым ответом, компилирующим исходники java 7 source и java 8, используя maven-compiler-plugin
, версию 3.5.1. Поскольку плагин компиляции использовал исходный/целевой параметр как для основного, так и для тестового источников.
Но я узнал, что есть отдельные параметры конфигурации для источника и цели теста.
Итак, для меня решение, которое работало, было
<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>