2012-08-08 23 views
9

Sé que desde Groovy 2.0 hay anotaciones para la compilación estática. Sin embargo, es fácil omitir dicha anotación por accidente y aún así tener problemas.¿Hay alguna bandera global para la compilación estática de Groovy?

¿Hay alguna manera de lograr el comportamiento opuesto del compilador, como compilar estáticos todos los archivos de proyecto de forma predeterminada y compilar solo archivos dinámicos elegidos por propósito con algún tipo de anotación @CompileDynamic por ejemplo?

Respuesta

5
No

en este momento, pero hay una open Jira issue here puede seguir para ver el progreso de esta característica

También hubo una discusión acerca de métodos para hacer esto on the Groovy developers list

+0

Gracias, acabo de votar el problema JIRA y ahora lo sigo. – topr

+3

https://issues.apache.org/jira/browse/GROOVY-5503 –

+2

Como se menciona en @topr, esta es ahora una característica de Groovy 2.1+, podría ser bueno actualizar la respuesta para los visitantes futuros. – Terence

11

He encontrado algunas (creo recientemente introducido) función que permite hacerlo con Gradle.

En build.gradle archivo para el proyecto que contiene fuentes maravilloso que tenemos que añadir siguientes líneas:

compileGroovy { 
    configure(groovyOptions) { 
     configurationScript = file("$rootDir/config/groovy/compiler-config.groovy") 
    } 
} 

o compileTestGroovy { ... para la aplicación de la misma a las fuentes de prueba. Tenga en cuenta que ni la compilación estática ni la comprobación de tipos funcionan bien con Spock Framework. Spock por su naturaleza utiliza mucho 'groovyness' dinámico.

A continuación, en una raíz del proyecto Crear carpeta config/maravilloso/ y un archivo llamado compilador config.groovy dentro. El contenido del archivo es la siguiente:

import groovy.transform.CompileStatic 

withConfig(configuration) { 
    ast(CompileStatic) 
} 

Obviamente ruta y el nombre de la configurationScript pueden variar y depende de ti. No debería ir al mismo src/main/groovy, ya que sería mezclar preocupaciones totalmente separadas.

Lo mismo se puede hacer con groovy.transform.TypeChecked o cualquier otra anotación, por supuesto.

Para invertir el comportamiento aplicado en ciertas clases o métodos, se pueden usar la anotación @CompileDynamic o @TypeChecked(TypeCheckingMode.SKIP), respectivamente.

No estoy seguro de cómo lograr lo mismo cuando no se usa Gradle como herramienta de compilación. Sin embargo, puedo actualizar esta respuesta en el futuro con esa información.

+1

Oye, ¿está escrito en algún lugar de los documentos de Groovy? ¿Puedes proporcionar la fuente de esta solución? – ThanosFisherman

Cuestiones relacionadas