Различные версии компилятора maven для тестовой и основной

StackOverflow https://stackoverflow.com/questions/1213897

Вопрос

Как я могу настроить компилятор maven для использования java 5 для моего тестового кода и java 1.4 для моего основного кода?

Это было полезно?

Решение

Если вы хотите установить соответствие для соответствующей версии 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 test с использованием maven-compiler-plugin , версия 3.5.1. Поскольку плагин компиляции использовал параметр source / target как для основного, так и для тестового источника.

Но я обнаружил, что существуют отдельные параметры конфигурации для источника и цели теста.

Так что для меня решение, которое сработало, было

 <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>
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top