Diferentes versões do compilador maven para testes e principal
-
06-07-2019 - |
Pergunta
Como posso configurar o compilador maven usar Java 5 para o meu código de teste e Java 1.4 para o meu código principal?
Solução
Se você deseja definir a conformidade com a versão relevante Java, você pode configurar o plugin compilador para cada execução. Assumindo Maven está usando um JDK pelo menos tão atual como a versão mais alto que você especificar. Usando propriedades que você pode substituir essa configuração na linha de comando ou em uma criança, se necessário:
<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>
Se você quer dizer usando diferentes compiladores , que é um pouco mais envolvidos. como você precisa especificar o caminho para o JDK e o compilador versão que você está usando. Novamente estes podem ser definidos em propriedades. Embora você pode querer defini-los em sua 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>
Nota pode fazer sentido para definir as configurações do compilador em perfis, um para cada JDK-lhe apoio, de modo que o seu normal, constrói não dependem de propriedades sendo definido.
Além disso, em Maven 3.x, você precisa incluir o parâmetro fork
ao especificar o executável, por exemplo:.
<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>
Outras dicas
Eu não tive sorte com a resposta aceita compilar java 7 source e Java 8 fontes de teste usando o maven-compiler-plugin
, versão 3.5.1. Porque o plugin compilação usado o parâmetro de origem / destino para ambos, fontes principais e de teste.
Mas eu descobri, há parâmetros de configuração separados para a fonte de teste e de destino.
Então, para mim a solução que funcionou foi
<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>