¿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?Diferentes versiones de compilador maven para prueba y principal
Respuesta
Si desea establecer el cumplimiento de la versión de Java correspondiente, 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. Mediante el uso de propiedades puede anular esa configuración en la línea de comandos o en un niño 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 se refiere a el uso de diferentes compiladores , eso es un poco más complicado. ya que necesita especificar la ruta al JDK y la versión del compilador que está utilizando. De nuevo, estos se pueden definir en propiedades. Aunque es posible que desee definir en tu 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 podría tener sentido para definir las configuraciones de compilación de perfiles, uno para cada JDK usted apoya, por lo que su construye normales no se basan en propiedades siendo establecido.
Además, en Maven 3.x, es necesario 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>
No tuve suerte con la respuesta aceptada la compilación de Java 7 y fuente de Java 8 fuentes de prueba usando el maven-compiler-plugin
, versión 3.5.1. Debido a que el plugin de compilación utilizó el parámetro fuente/destino para las fuentes principales, de prueba y de prueba.
Pero descubrí que hay parámetros de configuración separados para la fuente de prueba y el objetivo.
Así que 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>
- 1. Maven 2 - diferentes versiones de dependencia en prueba y compilación
- 2. Maven - dependencias transitivas con diferentes versiones
- 3. Diferentes extensiones de archivos para diferentes versiones
- 4. Maven: compilación y prueba en diferentes niveles de fuente
- 5. ¿Configura Maven para usar diferentes JDK para diferentes versiones de J2SE?
- 6. Diferentes versiones de la misma dependencia en Maven
- 7. JAXB y diferentes versiones de la clase
- 8. ¿Cómo utilizar el complemento Maven Surefire con diferentes grupos para prueba e integración-prueba?
- 9. mejores prácticas para Maven de versiones diferentes ramas [Desarrollo, QA/pre-lanzamiento]
- 10. binario universal para diferentes versiones de SSE
- 11. Usando diferentes versiones de python para diferentes proyectos en Eclipse
- 12. Cargando en el cheeseshop versiones diferentes de un paquete para diferentes versiones de Python
- 13. Java/Maven: diferentes versiones SLF4J en diferentes proyectos que causan errores de compilación en la integración
- 14. compilador personalizado con maven
- 15. Programa diferentes diseños para diferentes versiones en Android
- 16. iPhone: Prueba de aplicación y ubicación principal
- 17. Diferentes dependencias para diferentes perfiles de construcción en maven
- 18. ¿Condicionalmente incluye una biblioteca para diferentes versiones de iOS SDK?
- 19. Versiones para un proyecto maven con versiones pequeñas y muy frecuentes
- 20. Casos de prueba del compilador o cómo probar un compilador
- 21. configuración predeterminada del compilador maven
- 22. Crea para diferentes plataformas el modo Maven
- 23. Averiguar qué compilador usa Maven
- 24. Versiones Maven Plugin en Eclipse
- 25. Prueba con Spring y Maven: applicationContext
- 26. Línea de shebang condicional para diferentes versiones de Python
- 27. Usa diferentes iconos con diferentes versiones de Android SDK
- 28. Utilizando diferentes versiones de jQuery y jQueryUI juntos
- 29. Maven - skip proyecto principal construir
- 30. Maven + SLF4J: Conflicto de versión cuando se usan dos dependencias diferentes que requieren dos versiones diferentes de SLF4J
Cuando intento el primer ejemplo con origen y destino la versión '1.8' para las pruebas y' 1.7' de código principal, la compilación tiene éxito cuando 'compile' mvn se ejecuta por separado de 'mvn test-compile', pero en comandos tales como' mvn compile test-compile' o, más simplemente, 'mvn test-compile' (donde' pull' compile' se extrae) la configuración principal con ' 'parece tener prioridad, y falla. –
La solución es que es ' valor predeterminado-testCompile ' que anula el comportamiento predeterminado. La respuesta anterior agrega una ejecución adicional. –
Perdona mi falta de comprensión sobre las ejecuciones. ¿Esto provocará que el código de la aplicación principal se compile en la misma versión de destino que el código de prueba si se ejecutan pruebas de experto? ¿O las fuentes principales y de prueba tendrán diferentes versiones de código de bytes objetivo? –