Pregunta

¿Cómo puedo configurar el compilador maven para usar java 5 para mi código de prueba y java 1.4 para mi código principal?

¿Fue útil?

Solución

Si desea establecer el cumplimiento de la versión Java relevante, puede configurar el complemento del compilador para cada ejecución. Suponiendo que Maven está utilizando un JDK al menos tan actual como la versión más alta que especifique. Al usar propiedades, puede anular esa configuración en la línea de comandos o en un elemento secundario si es necesario:

<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>

Si te refieres a usar diferentes compiladores , eso es un poco más complicado. ya que necesita especificar la ruta al JDK y qué versión de compilador está utilizando. Nuevamente, estos se pueden definir en propiedades. Aunque es posible que desee definirlos en su 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>

Tenga en cuenta que puede tener sentido definir las configuraciones del compilador en los perfiles, una para cada JDK que admita, para que sus compilaciones normales no dependan de las propiedades que se establezcan.

Además, en Maven 3.x, debe incluir el parámetro fork al especificar el ejecutable, por ejemplo:

  <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>

Otros consejos

No tuve suerte con la respuesta aceptada compilando la fuente java 7 y las fuentes de prueba java 8 usando el maven-compiler-plugin , versión 3.5.1. Debido a que el complemento de compilación utilizó el parámetro fuente / destino para las fuentes principal y de prueba.

Pero descubrí que hay parámetros de configuración separados para el origen y el destino de la prueba.

Entonces, para mí, la solución que funcionó fue

 <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 bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top