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?

Foi útil?

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>
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top