Как настроить компилятор maven для использования java 5 для моего тестового кода и java 1.4 для моего основного кода?Различные версии компилятора maven для теста и основные
ответ
Если вы хотите установить соответствие для соответствующей версии 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 и какую версию компилятора вы используете. Опять же, они могут быть определены в свойствах. Хотя вы можете определить их в 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>
Примечания это может иметь смысл для определения конфигурации компилятора в профилях, по одному для каждой версии 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>
Я не везло с принятым ответ компиляции Java 7 и 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>
При попытке первого примера с исходной и целевой версией '1.8' для испытаний и' 1.7' для основного кода, компиляция завершается успешно когда 'МВН compile' запускается отдельно от 'mvn test-compile', но в таких командах, как' mvn compile test-compile' или, проще говоря, 'mvn test-compile' (где' compile' втягивается), основная конфигурация с ' 1.7 'Кажется, имеет приоритет, и он терпит неудачу. –
Решение состоит в том, что это ' default-testCompile ', который переопределяет поведение по умолчанию. Вышеприведенный ответ добавляет дополнительное выполнение. –
Простите мое отсутствие понимания о казни. Это приведет к тому, что основной код приложения будет скомпилирован с той же целевой версией, что и тестовый код, если выполняется тестирование maven? Или основные и тестовые источники имеют разные целевые версии байт-кода? –